db2 case/cast声明问题

vs3odd8k  于 2023-05-17  发布在  DB2
关注(0)|答案(1)|浏览(104)

我的数据库包括一个“供应商发票号”列。此列包含字符串和整数。由于Excel和Db2不能很好地沿着,我试图在输出时格式化数据,以便自动化我的报告。下面是可以工作的代码,但我想了解为什么当我修改代码时,它不能按预期工作。

CASE
  WHEN substring(vendor_invoice_number,1,1) = 0 or
       lcase(substring(vendor_invoice_number,1,1)) between 'a' and 'z'
  THEN TRIM(vendor_invoice_number)               
END as "invoice",
cast(vendor_invoice_number as INT)

它的工作原理是给我2列,然后我在Excel中使用IF(ISNA)函数操作以选择正确的列。
如果我将cast(vendor_invoice_number as INT)作为ELSE移动到CASE语句中,那么我将丢失所有字符串发票号,所有前导零,并且它将该列中的所有内容都转换为INTEGER,即使WHEN语句为真。
为什么?

xmd2e60i

xmd2e60i1#

Db2或任何其他RDBMS都不允许在同一列中返回不同的类型。
你的DB列是一个字符串,你只需要返回它。
真实的的问题是你是如何从SQL选择到Excel的?
如果您正在查询外部表,Excel不应该尝试重新格式化它。
有各种工具可用于直接在IBMi上从SQL语句生成XLS/XLSX,该SQL语句也应该将其保留为字符串。

相关问题