我的数据库包含一个“供应商发票编号”列。此列包含字符串和整数。因为 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 语句为真。
为什么?
Db2 或与此相关的任何其他 RDBMS 不允许在同一列中返回不同类型。
您的数据库列是一个字符串,您只需要原样返回它。
真正的问题是如何从 SQL 选择到 Excel?
如果您正在查询外部表,Excel 不应该尝试重新格式化它。
有多种工具可用于直接在 IBM i 上从 SQL 语句生成 XLS/XLSX,也应将其保留为字符串。