Redshift中提取VARCHAR类型字段的小数点前内容
解决Redshift中Vendors表vendor_id字段的格式处理问题
针对你描述的需求——将带小数的数值型vendor_id保留小数点前部分,字符串型值原样返回,可以用以下两种SQL实现方式:
方法一:正则表达式匹配处理
适用于严格匹配数字+.+数字格式的数值字符串,直接分割小数点取前半部分:
SELECT CASE WHEN REGEXP_INSTR(vendor_id, '^\\d+\\.\\d+$') > 0 THEN SPLIT_PART(vendor_id, '.', 1) ELSE vendor_id END AS cleaned_vendor_id FROM Vendors;
REGEXP_INSTR用于判断字段是否符合纯小数格式(开头是数字,中间小数点,结尾是数字)- 符合条件的用
SPLIT_PART按小数点分割,取第一部分作为结果;不符合的返回原字段
方法二:数值转换取整处理
更通用的方案,能兼容所有合法数值格式(比如123、123.45、0.99甚至123.这类格式):
SELECT CASE WHEN TRY_CAST(vendor_id AS NUMERIC) IS NOT NULL THEN CAST(FLOOR(TRY_CAST(vendor_id AS NUMERIC)) AS VARCHAR) ELSE vendor_id END AS cleaned_vendor_id FROM Vendors;
TRY_CAST尝试将字段转为数值类型,转换失败时返回NULL,以此区分数值型和字符串型值- 转换成功的数值用
FLOOR取整数部分,再转回字符串类型;转换失败的直接返回原字段
内容的提问来源于stack exchange,提问作者nodev_101
相关产品推荐
相关产品推荐

