And*_*ewG 32 t-sql sql-server exception-handling
MS SQL服务器中是否有任何"转换"功能允许安全地转换类型(不抛出异常).我需要在C#lang中使用类似"tryParse"的东西,但需要SQL语句.
更详细的,我需要以下语句返回零或任何其他但抛出异常.
select convert(float,'fjsdhf')
提前致谢.
ric*_*ent 34
这将默认非数字为0,不需要另一个语句:
SELECT CASE
WHEN ISNUMERIC(myvarcharcolumn)=1 THEN
CONVERT(float, REPLACE(LTRIM(RTRIM(myvarcharcolumn)), ',', '.'))
ELSE 0 END AS myfloatcolumn
Run Code Online (Sandbox Code Playgroud)
REPLACE()函数调用用于将逗号更改为句点.逗号在某些文化中用作小数分隔符(例如,"1,25"而不是"1.25"),但除非您的服务器设置为其中一个作为默认文化,否则ISNUMERIC()将返回1但CONVERT( )会抛出错误.这确实意味着您的字符串不应使用逗号作为千位分隔符,但在大多数情况下,小数占位符的逗号更可能是小数占位符.
LTRIM(RTRIM())调用是因为ISNUMERIC()将为带有前导或尾随空格的字符串返回1,但CONVERT()无法处理它们.所以,你必须修剪你的弦.
唯一剩下的潜在问题是,如果数字可以表示为int,currency,decimal或float,则ISNUMERIC()将返回1,但您只是转换为浮点数.实际上,一个float可以存储你抛出的任何东西,但如果你试图转换为int,ISNUMERIC()将返回1表示类似"2.5"的值,但CONVERT(int,'2.5')将仍然抛出错误.
Dev*_*ner 12
在SQL SERVER 2012中,有一些新功能可以解决这个问题
try_cast try_convert try_parse
您可以使用TSQL函数ISNUMERIC()测试值是否为数值
http://msdn.microsoft.com/en-us/library/ms186272.aspx
而且,如果你还没有意识到它,TSQL现在有一个TRY CATCH结构.
http://msdn.microsoft.com/en-us/library/ms179296.aspx
| 归档时间: |
|
| 查看次数: |
28407 次 |
| 最近记录: |