我有一个Microsoft SQL 2008 R2数据库,将小数存储为Nvarchar(20)。由于某些原因,所有字段都用空格填充。
转换失败,并出现以下错误:
“ 消息8114,级别16,状态5,第7行
将数据类型nvarchar转换为数字时出错。“
我用RTRIM()
删除空格,使用REPLACE()
用点替换逗号,并使用CAST()
进行转换。该行将失败。我添加了第二行而不进行强制转换,只是为了直观地检查值,但看不到任何导致失败的原因。然后,我再次取消对第一行的评论,然后投放成功了。但是仅当第二行与之结合在一起时。我不知道是什么原因造成的。
SELECT
CAST(REPLACE(RTRIM(nvarcharDecimalValue),',','.') AS DECIMAL(12,3)) as WillFailIfAlone,
REPLACE(RTRIM(nvarcharDecimalValue),',','.') as NeedToBeHere
FROM myTable
我期望返回的值是用点分隔的任何十进制数字。仅使用手动插入的值运行查询即可正常工作。
例如:
SELECT
CAST(REPLACE(RTRIM(' 5,86'),',','.') AS DECIMAL(18,3)) AS test