我正在尝试在JOIN ON子句中构建case / if语句。
JOIN ON
LEFT JOIN [CTSTRC] [Statuses] ON RIGHT([Statuses].[STRID], 3) = [CTE].[F61]
问题在于该列[Statuses].[STRID]包含文本和数字。我要与之比较的列[CTE].[F61]是一个整数。
[Statuses].[STRID]
[CTE].[F61]
有没有一种方法可以检测列[Statuses].[STRID]是否包含字符或数字,然后将其设置为0,然后将其设置为0?
这是一个伪查询可以帮助您:
LEFT JOIN [CTSTRC] [Statuses] ON RIGHT(( CASE [Statuses].[STRID] WHEN TEXT THEN 0 ELSE CAST([Statuses].[STRID] AS INT) END), 3) = [CTE].[F61]
您正在寻找IsNumeric,但它并不总是有效(+,-和。是数字),因此您需要使用GBN所描述的解决方案,即在您的varchar中添加.0e0
LEFT JOIN [CTSTRC] [Statuses] ON (CASE WHEN ISNUMERIC(RIGHT([Statuses].[STRID], 3) + '.0e0) = 1 THEN CAST(RIGHT([Statuses].[STRID], 3) AS INT) ELSE 0 END) = [CTE].[F61]