identity.person.heightPerson height in cm, inches, or feet.inches format (e.g., 180cm, 5'10", 180). Transforms to DOUBLE (centimeters). Decompose extracts value and unit.
$ finetype infer -i "180 cm"
→ identity.person.heightSELECT finetype('180 cm');
-- → 'identity.person.height'CASE
WHEN UPPER({col}) LIKE '%FT%' OR {col} LIKE '%\\''%' THEN
(CAST(REGEXP_EXTRACT({col}, '^([0-9]+)') AS DOUBLE) * 30.48) +
(CAST(COALESCE(REGEXP_EXTRACT({col}, '\\'([0-9]+)'), '0') AS DOUBLE) * 2.54)
WHEN UPPER({col}) LIKE '%IN%' THEN CAST(REGEXP_EXTRACT({col}, '^([0-9.]+)') AS DOUBLE) * 2.54
ELSE CAST(REGEXP_EXTRACT({col}, '^([0-9.]+)') AS DOUBLE)
END
-- Normalise and cast in one step
SELECT TRY_CAST(finetype_cast(my_column) AS DOUBLE) AS clean_value
FROM my_table
WHERE finetype(my_column) = 'identity.person.height';unit: UPPER(COALESCE(REGEXP_EXTRACT({col}, '([A-Z]+)$'), CASE WHEN LENGTH({col}) > 10 THEN 'CM' ELSE 'INCH' END))
value: CAST(REGEXP_EXTRACT({col}, '^([0-9.]+)') AS DOUBLE){
"$id": "https://meridian.online/schemas/identity.person.height",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"description": "Person height in cm, inches, or feet.inches format (e.g., 180cm, 5'10\", 180). Transforms to DOUBLE (centimeters). Decompose extracts value and unit.",
"examples": [
"180 cm",
"5'10\"",
"70 inches",
"6 ft"
],
"pattern": "^[0-9]+(\\.[0-9]+)?\\s*(cm|in|ft|inches|feet)?$|^[0-9]+'[0-9]+\"$",
"title": "Height",
"type": "string",
"x-finetype-broad-type": "DOUBLE",
"x-finetype-transform": "CASE\n WHEN UPPER({col}) LIKE '%FT%' OR {col} LIKE '%\\\\''%' THEN\n (CAST(REGEXP_EXTRACT({col}, '^([0-9]+)') AS DOUBLE) * 30.48) +\n (CAST(COALESCE(REGEXP_EXTRACT({col}, '\\\\'([0-9]+)'), '0') AS DOUBLE) * 2.54)\n WHEN UPPER({col}) LIKE '%IN%' THEN CAST(REGEXP_EXTRACT({col}, '^([0-9.]+)') AS DOUBLE) * 2.54\n ELSE CAST(REGEXP_EXTRACT({col}, '^([0-9.]+)') AS DOUBLE)\nEND\n"
}180 cm5'10"70 inches6 ft