【发布时间】:2019-01-17 20:49:32
【问题描述】:
所以,我有一个问题,我有一个通过宏变量非常灵活的 Teradata SQL 代码,因此 INPUT 可以是不同类型的表。在那些
表中总是有信息 s_id,但有时 s_id 是字符串,有时是 int。所以我想将字符串转换为一个 int,如果它已经是一个 int,那么它应该只复制该值。
SELECT DISTINCT &i as F_ID,
/*In different Tables the Sid can appear as an string or integer. This CASE WHEN transforms a string into a Integer in case of a not numeric ID*/
CASE WHEN TYPE(data.&columnSId.) not like '%CHAR%' and to_number(data.&columnSId.) is NULL
THEN data.&columnSId.
WHEN TYPE(data.&columnSId.) like '%CHAR%'
THEN CAST(to_number(data.&columnSId.) as FLOAT)
ELSE 0
END as s_id,
FROM database.table
但是,在 s_id 已经是 int 的情况下,它仍然会尝试使用函数 to_number ,这将失败并以这个错误结束:
Teradata 执行:使用无效号码调用函数“to_number” 或参数类型。
你知道我可以如何防止这个错误吗?当第一个案例已经成立时,为什么还要看另一个案例?
【问题讨论】: