sql - 如何在 SQL 中转换此值?
问题描述
我有像
3'023
'464
2'652
21.6%
'64
我正在使用以下 SQL 代码更改为如下所示;
UPDATE table
SET Adjusted_value_tst = REPLACE(LTRIM(RTRIM(value)), '''', '.')
WHERE [Value] LIKE '%''%';
结果:
3.023
0.464
2.652
21.6%
0.64
这对于 3 个十进制值是正确的。但是,我应该将 '64 转换为 0.064
请帮助我如何修改我的查询以便将 3'023 转换为 3.023 和 '64 转换为 0.064
谢谢鲍勃
解决方案
只需删除'
然后除以 1000:
SELECT *, REPLACE(N,'''','') / 1000.0
FROM (VALUES ('3''023'),('''464'),('2''652'),('''64')) V(N);
如果您必须将其保留到小数点后 3 位,请使用CONVERT
将值更改为 adecimal(12,3)
或类似值。
编辑:
看来 OP 不知道UPDATE
. 这将是:
UPDATE YourTable
SET YourColumn = REPLACE(YourColumn,'''','') / 1000.0;
编辑2:
OP 的场景比最初描述的要多。如果没有更多我们不知道的场景,这应该(现在编辑它)工作......:
UPDATE YourTable
SET YourColumn = ISNULL(CONVERT(varchar(20),CONVERT(decimal(12,3),TRY_CONVERT(decimal(12,3),REPLACE(YourColumn,'''','')) / 1000)), YourColumn);
这涉及到几个嵌套CONVERT
的 s。它并不完全“漂亮”,但是,它非常简单。CONVERT
在初始值之后需要外部TRY_CONVERT
值,以便该值只有 3 个小数位。Adecimal(12/3) / decimal(4,0)
将导致比例为max(6, s1 + p2 + 1) = max(6, 3 + 4 + 1) = max(6,8) = 8
,这超出了 OP 的要求。所以 value'3'023'
最终会成为 value '3.02300000'
。 精度、比例和长度 (Transact-SQL)
推荐阅读
- driver - 如何将wifi驱动程序添加到buildroot
- json - 如何在 Kotlin 中解析 JSON 数组
- facebook - (#200) 该应用程序未列入使用此 API 的白名单
- c++ - std::map::operator[] 比 std::map::insert 更高效?
- wordpress - 更改悬停菜单颜色
- css - 如何在图像上获得透明波浪边框效果
- sql - Laravel 查询不使用 where 子句作为日期
- javascript - 如果接受断开/连接 Web 套接字,WebSocket 不会重新连接
- bash - 如何在shell脚本的字符串中使用参数?
- java - Java javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,1] 消息:prolog 中不允许内容