Snowflake SQL:如何筛选首5位为数字且在指定范围的ProcedureCode行?
Snowflake 实现首5位数字且数值在指定范围的筛选方案
可以通过Snowflake的TRY_TO_NUMBER函数替代T-SQL的IsNumeric(),结合字符串截取和范围判断来实现需求,具体SQL语句如下:
SELECT * FROM ProcedureCode WHERE TRY_TO_NUMBER(LEFT(ProcedureCode, 5)) BETWEEN 99200 AND 99499;
关键逻辑说明:
LEFT(ProcedureCode, 5):提取字段的前5个字符,原字符串长度不足5时返回整个字符串。TRY_TO_NUMBER():尝试将截取的字符串转换为数字,若转换失败(比如包含非数字字符)则返回NULL,WHERE子句会自动过滤这些NULL值,效果等同于T-SQL中IsNumeric()的判断,且比IsNumeric()更可靠(避免T-SQL中该函数对特殊字符误判的问题)。BETWEEN 99200 AND 99499:直接判断转换后的数值是否在目标范围内,同时自动过滤长度不足5的数字(比如9920这类4位数字,转换后数值远小于99200,不会被选中)。
补充:更严谨的写法(可选)
如果需要严格确保前5位是恰好5个数字字符(提前拦截长度不足5的情况,虽然这类情况最终也会被范围过滤),可以添加长度判断:
SELECT * FROM ProcedureCode WHERE LENGTH(LEFT(ProcedureCode, 5)) = 5 AND TRY_TO_NUMBER(LEFT(ProcedureCode, 5)) BETWEEN 99200 AND 99499;
内容的提问来源于stack exchange,提问作者Talay
相关产品推荐
相关产品推荐

