При использовании функции IFF (), если данные нулевые, я получу не совпадают - PullRequest
0 голосов
/ 03 февраля 2019

При использовании функции IFF () для сравнения данных между 2 таблицами, исходной и целевой, если столбец имеет значение IS NUll, я получил бы «не совпадает».Не могли бы вы дать мне совет?

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

Если данные совпадают в столбце, независимо от того, является ли пустая строка или значение NULL, то это должно дать мне результат 'MATCH', если данные не совпадают, я должен получить 'Не соответствует '

Ответы [ 2 ]

0 голосов
/ 03 февраля 2019

Во-первых, я настоятельно советую вам использовать case вместо iif().case выражения являются стандартным SQL.iif() предназначен для «обратной» совместимости с MS Access.

Во-вторых, вам необходимо четко указать сравнение NULL в SQL Server.Он не поддерживает 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,
0 голосов
/ 03 февраля 2019

используйте coalesce для проверки на ноль и замените ноль значением, которое никогда не будет совпадать со значением столбца сравнения

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