我在寻找一种优雅的方式为VARCHAR类型的字段转换,并在它的可变数据,为数据类型可以用于从现场 数学运算采样数据(不包括引号)SQL Server中的变量varchar字段转换为金钱/十进制/东西带小数位
''
'abc'
'23'
'23.2'
的方法应该适用于所有,并第&第二值应该返回0,而不是抛出一个SQL Server错误..
我在寻找一种优雅的方式为VARCHAR类型的字段转换,并在它的可变数据,为数据类型可以用于从现场 数学运算采样数据(不包括引号)SQL Server中的变量varchar字段转换为金钱/十进制/东西带小数位
''
'abc'
'23'
'23.2'
的方法应该适用于所有,并第&第二值应该返回0,而不是抛出一个SQL Server错误..
SELECT CASE IsNumeric(mycol) WHEN 1 THEN CAST(mycol AS FLOAT) ELSE 0 END
FROM mytable
试试这个:
SELECT CASE WHEN IsNumeric(YourColumn) = 0 THEN
0
ELSE
CAST(YourColumn AS decimal(18, 2))
END
您必须调整目标数据类型,我选择了十进制(18,2)进行演示。
如果您想将其转换,你应该使用的UPDATE
代替SELECT
UPDATE Table
SET Col1 = CAST(Col1 As Decimal(18,2))
我知道这是一个早已死亡的线程,但我最近从谷歌搜索偶然发现了它,并有一个思想。它不如CASE声明的优雅,但它是一种选择。
SELECT
COALESCE(CAST(NULLIF(ISNUMERIC(LEFT(MyColumn, PATINDEX('% %', MyColumn + ' ') - 1)), 1) AS MONEY), LEFT(MyColumn, PATINDEX('% %', MyColumn + ' ') - 1))
FROM
myTable
,或者你可以这样做:
Select COALESCE(CAST(NULLIF(ISNUMERIC(MyColumn), 1) AS MONEY), MyColumn)
FROM
myTable
顶级版本会看到“2”刚刚2,底部的人会看到它作为一个文本字段。
COALESCE
对此是一个很好的选择:查找更多信息here.它按顺序计算参数并返回第一个表达式的当前值,该表达式最初不计算为NULL。
ISNUMERIC
返回0或1取决于如果被评估的值可以被认为是SQL“数字”或“数字”类型中的一种。例如int,bigint,money ..
NULLIF
本质上找到您指定的值,如果它匹配,则将其替换为NULL
值。
CAST
只要改变这个例子来MONEY
数据类型到另正如你可以看到,如果你打破了楼下使用该信息的一个非常优雅的解决方案,我认为?
COALESCE(CAST(NULLIF(ISNUMERIC(COL1), 1) AS MONEY), COL1)
通常,当你存储在一个场不同类型的数据,它表明你有一个数据库设计问题。 – HLGEM 2012-07-19 18:53:22