MS SQL Server 中是否有任何“转换”函数可以安全地转换类型(不会引发异常)。我需要 C# 语言中的“tryParse”之类的东西,但作为 SQL 语句。
更详细地说,我需要以下语句返回零或除抛出异常之外的任何其他值。
选择convert(float, 'fjsdHF')
提前致谢。
最佳答案
这会将非数字默认为 0,并且不需要其他语句:
SELECT CASE
WHEN ISNUMERIC(myvarcharcolumn)=1 THEN
CONVERT(float, REPLACE(LTRIM(RTRIM(myvarcharcolumn)), ',', '.'))
ELSE 0 END AS myfloatcolumn
REPLACE() 函数调用用于将逗号更改为句点。逗号在某些区域性中用作小数点分隔符(例如,“1,25”而不是“1.25”),但除非您的服务器将其中一种设置为默认区域性,否则 ISNUMERIC() 将返回 1,但 CONVERT( )会抛出错误。这确实意味着您的字符串不应使用逗号作为千位分隔符,但在大多数情况下,小数占位符的逗号更有可能是小数占位符。
LTRIM(RTRIM()) 调用是因为 ISNUMERIC() 对于带有前导或尾随空格的字符串将返回 1,但 CONVERT() 无法处理它们。所以,你必须修剪弦。
剩下的唯一潜在问题是,如果数字可以表示为整数、货币、小数或 float ,但您只是转换为 float ,则 ISNUMERIC() 将返回 1。实际上, float 可以存储任何你扔给它的东西,但如果你试图转换为 int,ISNUMERIC() 会为“2.5”这样的值返回 1,但 CONVERT(int, '2.5') 会返回仍然抛出错误。
关于sql-server - MS SQL Server 强制转换无一异常(exception),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1042816/