gpt4 book ai didi

sql-server - 问题将列值从 VARCHAR(n) 转换为 DECIMAL

转载 作者:行者123 更新时间:2023-12-01 07:01:21 25 4
gpt4 key购买 nike

我有一个 SQL Server 2000 数据库,其中有一列类型为 VARCHAR(255)。所有数据要么是 NULL,要么是具有最多两个精度点的数字数据(例如“11.85”)。我尝试运行以下 T-SQL 查询,但收到错误“将数据类型 varchar 转换为数字时出错”

SELECT CAST([MyColumn] AS DECIMAL)
FROM [MyTable];

我尝试了更具体的 Actor 阵容,但也失败了。
SELECT CAST([MyColumn] AS DECIMAL(6,2))
FROM [MyTable];

我还尝试了以下操作以查看是否有任何数据是非数字的,并且返回的唯一值是 NULL。
SELECT ISNUMERIC([MyColumn]), [MyColumn]
FROM [MyTable]
WHERE ISNUMERIC([MyColumn]) = 0;

我尝试转换为其他数据类型,例如 FLOAT 和 MONEY,但只有 MONEY 成功。所以我尝试了以下方法:
SELECT CAST(CAST([MyColumn] AS MONEY) AS DECIMAL)
FROM [MyTable];

...效果很好。任何想法为什么原始查询失败?如果我先转换为 MONEY 再转换为 DECIMAL 会有问题吗?

谢谢!

最佳答案

这很可能取决于十进制符号是逗号还是点。以下是一些测试查询及其结果:

select CAST('3.6' as decimal) -- 3.60
select CAST('3,6' as decimal) -- Error converting data type varchar to numeric.
select CAST('3.6' as money) -- 3.60
select CAST('3,6' as money) -- 36.00 (!)
select ISNUMERIC('3.6') -- 1
select ISNUMERIC('3,6') -- 1

ISNUMERIC 的文档说:

ISNUMERIC returns 1 when the input expression evaluates to a valid integer, floating point number, money or decimal type; otherwise it returns 0



两者 3.63,6可以投到 money ,这就是为什么 isnumeric('3,6')返回 1 .

要解决此问题,请将逗号替换为点(反之亦然,如果您的系统使用逗号作为十进制符号):
select cast(replace('3,6',',','.') as decimal)

另一种选择是更改 Windows 中的“十进制符号”。它位于配置面板 -> 区域和语言 -> 格式 -> 其他设置 -> 数字。

关于sql-server - 问题将列值从 VARCHAR(n) 转换为 DECIMAL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2589103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com