sql-server - varchar 类型的 SQL Server 列具有点和破折号 - 右侧转换为十进制
问题描述
我有一个字符串列,其中示例数据如下:
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
但结果负数不能在 LEFT 中显示破折号(但破折号消失了),如下所示:
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小提琴: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]
推荐阅读
- python-3.x - Graphviz 决策树分别显示相同元素
- ios - 检测对 UIButton 特定部分的点击
- python - TypeError: hog() 得到了一个意外的关键字参数“block_norm”
- arrays - Dlang:从指针和长度构造数组
- firebase - Firestore 嵌套数组
- python - 为什么我会收到 AlreadyExistsError?
- tree - 在 BST 中插入节点时不显示输出
- qt - c ++共享库+ QList分配问题
- javascript - 在 html 中嵌入处理
- mysql - 通过mysql存储过程的“where子句”中的未知列