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

Разлика между NullIf() и IfNull() в SQLite

SQLite има функция, наречена nullif() и друга функция, наречена ifnull() , всеки от които служи за различна цел.

  • nullif() ви позволява да третирате определени стойности като NULL. Можете да мислите за това като „връщане на NULL, ако…“.
  • ifnull() ви позволява да замените NULL стойности с друга стойност. Можете да го мислите като „ако NULL, тогава…“.

Така че те основно правят обратното един на друг. Едната заменя стойностите NULL с друга стойност, а другата заменя друга стойност с NULL.

Примери

В някои случаи и двете функции могат да върнат един и същ резултат. Например:

SELECT
  nullif(1, 2),
  ifnull(1, 2);

Резултат:

nullif(1, 2)  ifnull(1, 2)
------------  ------------
1             1           

nullif() функцията връща копие на първия си аргумент, ако аргументите са различни, и NULL, ако аргументите са еднакви. В този случай аргументите са различни и той връща първия аргумент.

ifnull() функцията, от друга страна, връща копие на първия аргумент, различен от NULL. В този случай и двата аргумента не са NULL и така първият аргумент беше върнат.

Със следния пример започваме да виждаме разликата между тези две функции:

SELECT
  nullif(1, 1),
  ifnull(1, 1);

Резултат:

nullif(1, 1)  ifnull(1, 1)
------------  ------------
              1           

nullif() функцията връща NULL, когато и двата аргумента са еднакви. В този случай и двата аргумента бяха еднакви и така nullif() свърши работата си и върна NULL.

ifnull() функцията връща първия аргумент, различен от NULL, и така в този случай връща първия аргумент.

Фактът, че и двата аргумента са еднакви, не означава нищо за ifnull() . Той просто връща първия аргумент, различен от NULL. Като каза това, ако и двата аргумента са NULL, тогава той връща NULL.

Нека опитаме да добавим няколко NULL.

SELECT
  nullif(NULL, 1),
  ifnull(NULL, 1);

Резултат:

nullif(NULL, 1)  ifnull(NULL, 1)
---------------  ---------------
                 1              

В този случай nullif() върна NULL, защото NULL е първият аргумент (припомнете си, че nullif() връща първия си аргумент, ако и двата аргумента са различни).

ifnull() от друга страна върна първия си аргумент, различен от NULL.

Ето как изглежда, ако сменим аргументите.

SELECT
  nullif(1, NULL),
  ifnull(1, NULL);

Резултат:

nullif(1, NULL)  ifnull(1, NULL)
---------------  ---------------
1                1              

И двата аргумента са различни и така nullif() връща първия аргумент.

Първият аргумент не е NULL и така ifnull() го връща.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да извлека всички редове в моята DB?

  2. Запитвайте само първите данни от таблица

  3. Конструкторът SQLiteOpenHelper() е недефиниран

  4. SQLite избира редове, ако времевата марка съвпада с днешната дата

  5. java.util.MissingFormatArgumentException:Спецификатор на формат:s