如何编写一个sql命令来转换两个sql列并在同一个查询中包含一个计算

时间:2014-12-30 15:23:40

标签: sql-server sql-server-2008-r2 crystal-reports

以下是我的代码:

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转换为数字时出错。我需要同一查询中的信用和借记列总和。尝试使用上面的代码,如果我在查询中只包含一列进行转换,那么在转换时添加另一列会显示错误。我无法弄清楚问题

1 个答案:

答案 0 :(得分:1)

问题是,您的debitcredit列是文本,因此可以包含任何内容。您尝试将其限制为只有NOT LIKE '%[^.0-9]%'的数字值,但这还不够,因为您可能有12.3.6.7这样的值无法转换为小数。

在SQL Server中我无法使用LIKE来实现您想要实现的目标,因为LIKE不支持全范围的正则表达式操作 - 在事实上,这是非常有限的。在我看来,你试图通过多功能这些领域来折磨数据库设计。如果您要报告数字数据,请将它们存储在数字字段中。当然,这假定您可以控制架构。