如何将AWS Athena中复杂字符串列转换为整数?
解决方案
首先,你遇到的错误是因为正则表达式'([A-Za-z]'存在未闭合的括号,导致语法不合法。下面是修正后的SQL查询,同时优化了逻辑以满足你的需求:
SELECT CASE -- 排除包含字母、空格或横杠的非数值内容 WHEN regexp_like(employee_size, '[A-Za-z]') OR employee_size LIKE '% %' OR employee_size LIKE '%-%' THEN NULL -- 处理小数格式,舍去小数部分取整 WHEN employee_size LIKE '%.%' THEN CAST(FLOOR(CAST(employee_size AS DECIMAL)) AS INTEGER) -- 处理纯整数格式 ELSE CAST(employee_size AS INTEGER) END AS employee_size FROM "table_name";
逻辑说明:
- 第一步先过滤掉所有包含字母、空格或横杠的字符串,直接返回
null,覆盖了'GREATER THAN 2000'、'500 - 999'、'unknown'这类无法转换的情况。 - 对于小数格式(如
'28.00'、'5.64'),先转换为DECIMAL类型,再用FLOOR()函数舍去小数部分,最后转为INTEGER。 - 剩余的纯数字字符串(如
'563')直接转换为INTEGER。
如果不需要严格向下取整,只是截断小数部分,也可以简化为CAST(CAST(employee_size AS DECIMAL) AS INTEGER),效果和FLOOR()对于正数是一致的。
内容的提问来源于stack exchange,提问作者Siddarth Patil
相关产品推荐
相关产品推荐

