MS SQL筛选仅含数值型数据行的SQL语句问题求助
解决MS SQL筛选所有列均为数值型行的问题
嘿,我清楚你遇到的问题啦!你想要保留所有列都是数值型数据的行,但之前用OR逻辑的话,只要某一列是数值就会保留该行,这完全不符合你的需求——我们需要的是同时满足所有列都是数值,所以把逻辑运算符从OR改成AND就可以解决核心问题。
基础解决方案(修正逻辑运算符)
直接修改WHERE子句的逻辑,确保A列和B列都通过数值校验:
SELECT * FROM dbo.Test_Data t WHERE ISNUMERIC(A) = 1 AND ISNUMERIC(B) = 1;
这个语句会只保留A列和B列都能被识别为数值的行,刚好能移除你提到的第5行(B列值A.B非数值)和第9行(A列值1,2非数值),返回预期的7行数据。
更严谨的数值校验方案(避免ISNUMERIC的边缘问题)
不过要提醒你,ISNUMERIC()函数在某些场景下会有“误判”——比如它会把$、+、-甚至一些特殊格式的字符串(比如'123e4')识别为数值。如果你的业务需要更严格的数值校验(比如只保留纯数字/带小数点的数值),可以使用TRY_CAST或TRY_CONVERT函数:
SELECT * FROM dbo.Test_Data t WHERE TRY_CAST(A AS FLOAT) IS NOT NULL AND TRY_CAST(B AS FLOAT) IS NOT NULL;
TRY_CAST尝试把列值转换为指定的数值类型(这里用FLOAT,你也可以根据需求换成INT、DECIMAL等),如果转换失败会返回NULL,通过判断转换结果不为NULL,就能精准筛选出真正可以转换为数值的行。
内容的提问来源于stack exchange,提问作者ShushKebab
相关产品推荐
相关产品推荐

