我正在尝试在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/

10-09 01:37