db2 case/cast 声明问题

问题描述 投票:0回答:1

我的数据库包含一个“供应商发票编号”列。此列包含字符串和整数。因为 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 列来工作,然后我使用 IF(Excel 中的 ISNA 函数来选择正确的列。

如果我将

cast(vendor_invoice_number as INT)
作为
ELSE
移动到 CASE 语句中,那么我将丢失所有字符串发票编号、所有前导零,并且它会将该列中的所有内容都变成一个 INTEGER,即使 WHEN 语句为真。

为什么?

sql excel db2
1个回答
0
投票

Db2 或与此相关的任何其他 RDBMS 不允许在同一列中返回不同类型。

您的数据库列是一个字符串,您只需要原样返回它。

真正的问题是如何从 SQL 选择到 Excel?

如果您正在查询外部表,Excel 不应该尝试重新格式化它。

有多种工具可用于直接在 IBM i 上从 SQL 语句生成 XLS/XLSX,也应将其保留为字符串。

© www.soinside.com 2019 - 2024. All rights reserved.