SQL varchar 类型的服务器列有点和破折号 - 在右侧转换为十进制
SQL Server column of type varchar has dot and dash - on right side convert into Decimal
我有一个字符串列,其样本数据如下:
14.377.616
29.264.814
16.892.140
6.410.850-
我希望输出是这样的:
14377616.0000
29264814.0000
16892140.0000
-6410850.0000
该列必须转换为十进制。我有这样的查询:
CASE
WHEN Column LIKE '%-%'
THEN REPLACE(REPLACE(Column, '-', ''), '.', '')
WHEN Column LIKE '%-%'
THEN Column * -1
ELSE CONVERT(decimal(20, 4), REPLACE([Column], '.', ''))
END
但结果负数无法在左侧显示破折号(但破折号消失了),如下所示:
14377616.0000
29264814.0000
16892140.0000
6410850.0000
提前致谢
我会这样做:
with CastedTable (MyColumn)
as
(
select replace([Column],'.','') DecimalValue
from MyTable
)
select
case
when MyColumn like '%-%' then cast('-' + replace(MyColumn, '-', '') as decimal(20, 4))
else cast(MyColumn as decimal(20, 4)) end
from CastedTable
结果:
14377616
29264814
16892140
-6410850
SQL Fiddle: http://sqlfiddle.com/#!18/decccb/8
就是说,如果您想使用您的查询,那就是:
select CASE
WHEN [Column] like '%-%' THEN CONVERT(decimal(20,4),REPLACE(REPLACE([Column],'-',''),'.','')) * -1
ELSE CONVERT(decimal(20,4),REPLACE([Column],'.','')) END AS [Column]
您可以使用 right()
获取 + 或 - 并使用 replace()
替换点,如下所示
注意: '13123.123123'
-> colname
select
CASE WHEN RIGHT ( '13123.123123' , 1) <> '-' THEN
CAST ( REPLACE('13123.123123','.','') AS decimal)
ELSE
CAST ( REPLACE('13123.123123','.','') AS decimal) * -1
END
我有一个字符串列,其样本数据如下:
14.377.616
29.264.814
16.892.140
6.410.850-
我希望输出是这样的:
14377616.0000
29264814.0000
16892140.0000
-6410850.0000
该列必须转换为十进制。我有这样的查询:
CASE
WHEN Column LIKE '%-%'
THEN REPLACE(REPLACE(Column, '-', ''), '.', '')
WHEN Column LIKE '%-%'
THEN Column * -1
ELSE CONVERT(decimal(20, 4), REPLACE([Column], '.', ''))
END
但结果负数无法在左侧显示破折号(但破折号消失了),如下所示:
14377616.0000
29264814.0000
16892140.0000
6410850.0000
提前致谢
我会这样做:
with CastedTable (MyColumn)
as
(
select replace([Column],'.','') DecimalValue
from MyTable
)
select
case
when MyColumn like '%-%' then cast('-' + replace(MyColumn, '-', '') as decimal(20, 4))
else cast(MyColumn as decimal(20, 4)) end
from CastedTable
结果:
14377616 |
29264814 |
16892140 |
-6410850 |
SQL Fiddle: http://sqlfiddle.com/#!18/decccb/8
就是说,如果您想使用您的查询,那就是:
select CASE
WHEN [Column] like '%-%' THEN CONVERT(decimal(20,4),REPLACE(REPLACE([Column],'-',''),'.','')) * -1
ELSE CONVERT(decimal(20,4),REPLACE([Column],'.','')) END AS [Column]
您可以使用 right()
获取 + 或 - 并使用 replace()
替换点,如下所示
注意: '13123.123123'
-> colname
select
CASE WHEN RIGHT ( '13123.123123' , 1) <> '-' THEN
CAST ( REPLACE('13123.123123','.','') AS decimal)
ELSE
CAST ( REPLACE('13123.123123','.','') AS decimal) * -1
END