字符串数据右截断 DB2 错误

String data right truncation DB2 error

当我使用此查询

时,我在 db2 上收到错误 "String data right truncation"
SELECT BILL_NUMBER, 'PAPERWORK BUT NOT COMPLETE', 'NONE', NULL, '00000',NULL,NULL,TOTAL_CHARGES, NULL FROM TLORDER WHERE 
CURRENT_STATUS NOT IN ('COMPLETE','APPRVD','PAPERWISE','BILLD','EDIBILLED','CANCL')   AND BILL_TO_CODE NOT LIKE CASE WHEN :INCLUDE_DED = 'No' THEN 'ROCD%' ELSE '1234kkh5656' END
AND EXISTS (SELECT 1 FROM LIST_CHECKIN_AUDIT A WHERE A.BILL_NUMBER = TLORDER.BILL_NUMBER FETCH FIRST 1 ROW ONLY)
AND SITE_ID = :SITE AND DELIVER_BY_END >= CURRENT TIMESTAMP - 3 MONTHS AND COALESCE(PICK_UP_DRIVER,'') = '' AND '00000' =:DRIVER_ID 

然而,当我抑制这一行时,我没有得到错误。

AND BILL_TO_CODE NOT LIKE CASE WHEN :INCLUDE_DED = 'No' THEN 'ROCD%' ELSE '1234kkh5656' END

提前致谢!

我会先检查 bill_to_code 的数据类型。您返回的“1234kkh5656”可能超出数据类型的长度。

我敢猜测当 :INCLUDE_DED 主变量的值超过 2 个字节时会发生这种情况。您不提供变量数据类型,因此查询编译器从比较的右侧派生它,其中文字 'No' 的长度为 2 个字节。如果您随后将 'Yes' 之类的值分配给主机变量,则必须将其截断。

考虑向宿主变量引用添加显式类型信息,例如:

...WHEN CAST(:INCLUDE_DED AS VARCHAR(10)) = 'No'...

使用适合可能值范围的数据类型。