代码之家  ›  专栏  ›  技术社区  ›  DKCroat

当使用IFF()函数时,如果数据为空,我将收到不匹配的结果

  •  0
  • DKCroat  · 技术社区  · 7 年前

       IIF(T1.MBR_STAT  = CAST(T2.MEMSTA_SHORT_NAME AS VARCHAR(10)),'MATCH', 'DON''T MATCH')    AS MBR_STAT_VALIDATION,
    

    若列中的数据匹配,无论是空字符串还是空值,都应给出“匹配”结果,若数据不匹配,则应收到“不匹配”

    2 回复  |  直到 7 年前
        1
  •  1
  •   Gordon Linoff    7 年前

    case 而不是 iif() 案例 表达式是标准的SQL。 iif() 用于与MS Access“向后”兼容。

    第二,你需要清楚地表达你的想法 NULL 无效的

    (CASE WHEN T1.MBR_STAT = CAST(T2.MEMSTA_SHORT_NAME AS VARCHAR(10))
          THEN 'MATCH'
          WHEN T1.MBR_STAT IS NULL AND T2.MEMSTA_SHORT_NAME IS NULL
          THEN 'MATCH'
          ELSE 'DON''T MATCH'
     END) AS MBR_STAT_VALIDATION,
    

    我也觉得奇怪,你正在使用 CAST() 为此,当有一个非常好的函数时 LEFT() 这更简单,逻辑也更清晰:

    (CASE WHEN T1.MBR_STAT = LEFT(T2.MEMSTA_SHORT_NAME, 10)
          THEN 'MATCH'
          WHEN T1.MBR_STAT IS NULL AND T2.MEMSTA_SHORT_NAME IS NULL
          THEN 'MATCH'
          ELSE 'DON''T MATCH'
     END) AS MBR_STAT_VALIDATION,
    
        2
  •  0
  •   Zaynul Abadin Tuhin    7 年前

    coalesce 用于null检查,并将null替换为与比较列值永远不匹配的值

     IF(coalesce(T1.MBR_STAT,'something_')  = CAST(T2.MEMSTA_SHORT_NAME AS VARCHAR(10)),'MATCH', 'DON''T MATCH')    AS MBR_STAT_VALIDATION