我在下面有这个简单的查询(SQL Server数据库),我不知道为什么我会收到错误
将数据类型varchar转换为数字时出错。
所有数据类型均为decimal
。我的转换不正确吗?任何帮助表示赞赏。
SELECT
RTRIM(year_time) AS year_time ,
actual = CASE actual
WHEN '.00' THEN 0
WHEN '' THEN 0
ELSE CAST(actual AS NUMERIC(18, 2))
END ,
end_balance = CASE end_balance
WHEN '.00' THEN 0
WHEN '' THEN 0
ELSE CAST(end_balance AS NUMERIC(18, 2))
END ,
RTRIM(fund_code) AS fund_code ,
RTRIM(function_code) AS function_code ,
RTRIM(object_code) AS object_code ,
RTRIM(source_code) AS source_code ,
RTRIM(balance_sheet_code) AS balance_sheet_code
FROM
dbo.raw_ledger WITH (NOLOCK)
答案 0 :(得分:1)
这假设actual
和end_balance
确实是字符串(我看不出任何其他明显的原因,你会得到你得到的错误)。您可以像这样使用isnumeric()
函数:
actual = CASE actual
WHEN '.00' THEN 0
WHEN '' THEN 0
when isnumeric(actual) = 1 then CAST(actual AS NUMERIC(18, 2))
END ,
end_balance = CASE end_balance
WHEN '.00' THEN 0
WHEN '' THEN 0
when isnumeric(end_balance) = 1 then CAST(end_balance AS NUMERIC(18, 2))
END ,
如果值不是数字,则返回NULL,但它应该可以防止您的错误。