小编典典

JOIN ON子句中的T-SQL Case语句

sql

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

阅读 254

收藏
2021-03-23

共1个答案

小编典典

您正在寻找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]
2021-03-23