【问题标题】:how to write a sql command to convert two sql columns and include a calculation in same query如何编写一个 sql 命令来转换两个 sql 列并在同一个查询中包含一个计算
【发布时间】:2014-12-30 23:41:02
【问题描述】:

以下是我的代码:

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 转换为数字时出错。我需要在同一个查询中的贷方和借方列的总和。如果我在查询中仅包含一列以转换其工作 bt 在转换中添加另一列,则尝试使用上述代码显示错误。看不懂问题

【问题讨论】:

  • 你可以试试 ISNUMERIC() 函数,但它也不是 100% 万无一失的。

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


【解决方案1】:

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

我知道在 SQL Server 中没有办法使用LIKE 来实现您想要实现的目标,因为LIKE 不支持全部范围的正则表达式操作——事实上,它相当有限的。在我看来,您通过尝试多用途这些字段来折磨数据库设计。如果您要报告数字数据,请将它们存储在数字字段中。当然,这假设您可以控制架构。

【讨论】:

  • 你能分享一个失败的例子吗NOT LIKE '%[^.0-9]%'
  • 有什么简单的方法可以在sql查询中将冗长的数字转换为数字
  • @user3844217 - 除非您显示 creditdebit 列中存在的内容,否则无法修复。 roryap 所说的就是在这种情况下您的过滤器失败的一个例子。
  • 那么解决办法是什么
  • @user3844217 - 正如我在回答(几分钟前更新)中所说的那样,解决方案是如果要将数据用于数字操作,则需要将数据存储在数字字段中.
猜你喜欢
  • 2020-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-08
  • 2020-03-25
  • 2019-11-23
  • 1970-01-01
  • 2022-07-27
相关资源
最近更新 更多