选择varchar列转换为小数的所有行

Bla*_*man 0 sql sql-server where-clause

我有一个varchar通常有十进制值的列,但有时在该字段中有一些垃圾文本字符.

是否可以在WHERE子句中过滤成功转换为十进制值的行?

我正在使用sql-server 2005

And*_*mar 8

一种方法是ISNUMERIC功能:

select * from YourTable where ISNUMERIC(col1) = 1
Run Code Online (Sandbox Code Playgroud)

有一个问题:isnumeric每当字符串可以转换为任何数字类型时返回1,包括money.例如,假设您有使用不同小数分隔符的行,例如7.97,9.两者都将转换为money,并isnumeric为它们返回1.但只有一个转换为decimal,具体取决于SQL Server语言设置.