Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да пренапишем Е РАЗЛИЧНО ОТ и НЕ Е РАЗЛИЧНО ОТ?

IS DISTINCT FROM предикатът е въведен като характеристика T151 на SQL:1999 и неговото четливо отрицание, IS NOT DISTINCT FROM , беше добавен като функция T152 на SQL:2003. Целта на тези предикати е да гарантират, че резултатът от сравняването на две стойности е или Вярно или False , никога Неизвестен .

Тези предикати работят с всеки сравним тип (включително редове, масиви и мултинабори), което прави доста сложно имулирането им. Въпреки това, SQL Server не поддържа повечето от тези типове, така че можем да стигнем доста далеч, като проверим за нулеви аргументи/операнди:

  • a IS DISTINCT FROM b може да се пренапише като:

    ((a <> b OR a IS NULL OR b IS NULL) AND NOT (a IS NULL AND b IS NULL))
    
  • a IS NOT DISTINCT FROM b може да се пренапише като:

    (NOT (a <> b OR a IS NULL OR b IS NULL) OR (a IS NULL AND b IS NULL))
    

Вашият собствен отговор е неправилен, тъй като не отчита, че FALSE OR NULL оценява на Неизвестно . Например, NULL IS DISTINCT FROM NULL трябва да се оцени на False . По същия начин, 1 IS NOT DISTINCT FROM NULL трябва да се оцени на False . И в двата случая вашите изрази дават Неизвестно .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Осигурени данни в T-SQL

  2. Трябва да декларира скаларната променлива

  3. Използване на sp_help_jobschedule в SQL Server

  4. Трябва да изброите всички тригери в базата данни на SQL Server с име на таблица и схема на таблицата

  5. Ефективни замествания на ISNUMERIC() на SQL Server?