如何将varchar转换为负数?

时间:2017-05-31 17:13:01

标签: sql sql-server tsql sql-server-2012

我有一个表格,其中列包含($23,324.09)等数据。如果是$23,324.09,那么我可以将其转换为money,然后转换为float。但是当我尝试时( )导致错误。我是否必须将UDF应用于该列,或者是否有另一种方法来转换此类值。

注意:我无法控制数据如何到达该表。

2 个答案:

答案 0 :(得分:7)

您还可以使用PARSETRY_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