我有一个表格,其中列包含($23,324.09)
等数据。如果是$23,324.09
,那么我可以将其转换为money
,然后转换为float
。但是当我尝试时( )
导致错误。我是否必须将UDF应用于该列,或者是否有另一种方法来转换此类值。
注意:我无法控制数据如何到达该表。
答案 0 :(得分:7)
您还可以使用PARSE
或TRY_PARSE
SELECT TRY_PARSE('($23,324.09)' AS MONEY USING 'en-US')
返回
-23324.09
答案 1 :(得分:1)
使用一些231 * 109 – 1 = 2147483647999999999
:
replace()
返回:declare @col varchar(32) = '($23,324.09)'
select convert(decimal(19,4),replace(replace(replace(replace(@col,'(','-'),',',''),')',''),'$',''))
运行一个简单的测试,大概在1/3的时间内运行-23324.0900
等效测试。
dbfiddle:http://dbfiddle.uk/?rdbms=sqlserver_2016&fiddle=675f6eb70986bd24880c66a8be4f5cbd
以下是使用parse()
数据类型的较短替代方法:
money
dbfiddle:http://dbfiddle.uk/?rdbms=sqlserver_2016&fiddle=31bfc3e1e48b8f863e89bcef9a6ffddc