sql-server - MS SQL Server 强制转换无一异常(exception)

标签 sql-server tsql exception

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/

相关文章:

sql - 如何避免隐式类型转换

java - 无法解析异常错误中的参数 [0]

ruby - 在 Argument Error 消息上方和下方添加一个空行

exception - play activator - runtimeException : smtp. 主机需要在 application.conf 中设置才能使用此插件(或将 smtp.mock 设置为 true)

sql-server - 格式化 Sequelize 中列的返回类型

SQL Server 创建动态列 Login1、Login2、Login3

sql - 如何在sql查询中使用group by?

sql - 如何在 SQL 中计算该月的最后一天?

sql-server - 需要查询 - 确定每分钟的行数

sql - 加速一张表上的哈希匹配运算符