我正在尝试在JOIN ON
子句中构建case/if语句。
LEFT JOIN [CTSTRC] [Statuses] ON RIGHT([Statuses].[STRID], 3) = [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,但它并不总是有效(+,-和。是数字),因此您需要使用解决方案described by GBN,该方案将.0e0添加到您的varchar中
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]
关于sql - JOIN ON子句中的T-SQL Case语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8361183/