Db2中的数据类型转换
我目前一直坚持将表中的三个字段连接成一个字符串。这三个字段具有不同的数据类型Db2中的数据类型转换,db2,Db2,我目前一直坚持将表中的三个字段连接成一个字符串。这三个字段具有不同的数据类型 Select CASE COALESCE(CHAR_COLUMN,'XXX') WHEN 'XXX' THEN 'CHAR_COLUMN is null' else 'CHAR_COLUMN='''||CHAR_COLUMN||'''' END ||' and '|| CASE COALESCE(DT_COLUMN,TIMESTAMP('1980-01-01-00.
Select
CASE COALESCE(CHAR_COLUMN,'XXX') WHEN 'XXX'
THEN 'CHAR_COLUMN is null'
else 'CHAR_COLUMN='''||CHAR_COLUMN||'''' END
||' and '||
CASE COALESCE(DT_COLUMN,TIMESTAMP('1980-01-01-00.00.00'))
WHEN TIMESTAMP('1980-01-01-00.00.00') THEN 'DT_COLUMN is null'
else 'DT_COLUMN='''||DT_COLUMN||'''' END
||' and '||
CASE COALESCE(NUM_COLUMN,111) WHEN 111
THEN 'NUM_COLUMN is null'
else 'NUM_COLUMN='''||NUM_COLUMN||'''' END
from
S_DATATABLE
这在DB2/AIX64 9.1.7
中工作得非常好,但在db2z/os10.1.5
中却不行错误
当为数值列单独运行时
An unexpected token ",111" was found following ",111". Expected tokens may include: "CONCAT || / MICROSECONDS MICROSECOND SECONDS SECOND MINUTES". SQLSTATE=42601
当为日期列单独运行时
SQL0171N The data type, length or value of the argument for the parameter in position "2" of routine "||" is incorrect. Parameter name: "||". SQLSTATE=42815
请建议此DB2版本需要做哪些更改。提前感谢。首先,不管DB2版本如何,串联都需要字符操作数;不能连接字符串和整数——DB2将尝试隐式地将非字符数据类型转换为字符。最好是进行显式转换以避免错误 其次,您的SQL似乎过于复杂。而不是
CASE COALESCE(NUM_COLUMN,111)
WHEN 111
THEN 'NUM_COLUMN is null'
else 'NUM_COLUMN='''||NUM_COLUMN||''''
END
您可以简单地执行以下操作:
CASE WHEN NUM_COLUMN IS NULL
THEN 'NUM_COLUMN is null'
ELSE 'NUM_COLUMN='||VARCHAR(NUM_COLUMN)
END
请注意,在原始代码中,您将
NUM\u列
与字符文字进行比较,这也将导致隐式转换。并非所有DB2平台都支持所有数据类型之间的隐式转换,因此再次强调,不要依赖它,而是使用显式转换;不能连接字符串和整数——DB2将尝试隐式地将非字符数据类型转换为字符。最好是进行显式转换以避免错误
其次,您的SQL似乎过于复杂。而不是
CASE COALESCE(NUM_COLUMN,111)
WHEN 111
THEN 'NUM_COLUMN is null'
else 'NUM_COLUMN='''||NUM_COLUMN||''''
END
您可以简单地执行以下操作:
CASE WHEN NUM_COLUMN IS NULL
THEN 'NUM_COLUMN is null'
ELSE 'NUM_COLUMN='||VARCHAR(NUM_COLUMN)
END
请注意,在原始代码中,您将
NUM\u列
与字符文字进行比较,这也将导致隐式转换。并非所有DB2平台都支持所有数据类型之间的隐式转换,因此再次强调,不要依赖它,而是使用显式转换。您确定两个系统上的语句完全相同吗?错误消息表明语法不同,例如缺少撇号。您确定两个系统上的语句完全相同吗?错误信息表明语法有差异,例如缺少撇号。我理解你的观点。隐式转换在一个db2版本中工作正常,但在另一个版本中工作不正常[我再次尝试确认]。现在,正如您所建议的,我已经更改了代码,以便在需要时进行显式转换。它现在运转良好。谢谢,我明白你的意思。隐式转换在一个db2版本中工作正常,但在另一个版本中工作不正常[我再次尝试确认]。现在,正如您所建议的,我已经更改了代码,以便在需要时进行显式转换。它现在运转良好。谢谢