以下是我的代码:
SELECT sum_date, sum_accname, sum_description,
CASE WHEN debit NOT LIKE '%[^.0-9]%'
THEN CAST(debit as DECIMAL(9,2))
ELSE NULL
END AS debit,
CASE WHEN credit NOT LIKE '%[^.0-9]%'
THEN CAST(credit as DECIMAL(9,2))
ELSE NULL
END AS credit
FROM sum_balance
在查看报告时显示错误:将数据类型varchar转换为数字时出错。我需要同一查询中的信用和借记列总和。尝试使用上面的代码,如果我在查询中只包含一列进行转换,那么在转换时添加另一列会显示错误。我无法弄清楚问题
答案 0 :(得分:1)
问题是,您的debit
和credit
列是文本,因此可以包含任何内容。您尝试将其限制为只有NOT LIKE '%[^.0-9]%'
的数字值,但这还不够,因为您可能有12.3.6.7
这样的值无法转换为小数。
在SQL Server中我无法使用LIKE
来实现您想要实现的目标,因为LIKE
不支持全范围的正则表达式操作 - 在事实上,这是非常有限的。在我看来,你试图通过多功能这些领域来折磨数据库设计。如果您要报告数字数据,请将它们存储在数字字段中。当然,这假定您可以控制架构。