如果字符串还不是 int,则何时将字符串转换为 int

Case when to transform string to int if is is not already an int

所以,我有一个问题,我有一个 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 execute: Function 'to_number' called with an invalid number or type of parameters.

你知道我怎样才能避免这个错误吗?为什么在第一个案例已经为真时还要看另一个案例?

这是一个 解析时间错误 ,试图将 To_Number 应用于数值。我认为如果没有 Dynamic SQL.

,您将无法做您想做的事

但是这个 returns 通过先将数值转换为字符串得到类似的结果:

Coalesce(Cast(To_Number(Trim(data.&columnSId.)) AS INT), 0)

当然对于更大的表来说效率不是很高。