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

Как да използвате логиката IF...THEN в SQL Server

SQL Server има уникална способност да ви позволи да изпълнявате програмна логика в реално време върху стойностите във вашата заявка. Въз основа на тези логически оценки можете да генерирате различни стойности като част от върнатия набор от данни.

Използване на оператора CASE

Това се постига най-лесно във всички версии на SQL Server с помощта на CASE оператор, който действа като логически IF...THEN...ELSE израз и връща различни стойности в зависимост от резултата.

В този пример по-долу искаме да върнем допълнителен locale колона, която посочва дали действието на нашата книга се развива в Средната земя или обикновената стара Земя.

SELECT
  CASE
    WHEN
      books.title = 'The Hobbit'
        THEN
          'Middle-earth'
    WHEN
      books.primary_author = 'Tolkien'
        THEN
          'Middle-earth'
    ELSE
      'Earth'
  END AS locale,
  books.*
FROM
  books

Преди да разгледаме специалния CASE аспект на това изявление, нека временно премахнем CASE за да забележите, че това е изключително прост SELECT изявление на повърхността:

SELECT
  books.*
FROM
  books

Затова нека разгледаме как CASE секцията е структурирана и какво логическо поведение изпълняваме.

CASE
  WHEN
    books.title = 'The Hobbit'
      THEN
        'Middle-earth'
  WHEN
    books.primary_author = 'Tolkien'
      THEN
        'Middle-earth'
  ELSE
    'Earth'
END AS locale

За да започнем, ние инициализираме CASE след това посочете при какви условия (WHEN ) нашия CASE изявлението трябва да оцени резултата. В този пример разглеждаме books.title и books.primary_author; ако някое от тях отговаря на нашата тема в стил Толкин, THEN връщаме стойността „Средната земя“. Ако нито едно поле не отговаря на нашето търсене, вместо това връщаме стойността на „Земя“.

За да пренаредите логиката като псевдокод IF...THEN...ELSE изявление, ние просто молим SQL да оцени:

IF
  title == 'The Hobbit' OR
  primary_author == 'Tolkien'
THEN
  RETURN 'Middle-earth'
ELSE
  RETURN 'Earth'
END

И накрая, важно е да запомните, че CASE изявлението винаги трябва да се добавя в края със съответстващ END изявление. В горния пример ние също преименуваме получената стойност, която се връща на locale , въпреки че това със сигурност не е задължително.

Използване на функцията IIF

Ако използвате по-модерна версия на SQL, полезно е да знаете, че SQL Server 2012 представи много удобния IIF функция. IIF е съкратен метод за изпълнение на IF...ELSE /CASE оператор и връщане на една от двете стойности, в зависимост от оценката на резултата.

Преструктуриране на горния пример за използване на IIF е доста проста.

SELECT
  IIF(
    books.title = 'The Hobbit' OR books.primary_author = 'Tolkien',
    'Middle-earth',
    'Earth')
  AS locale,
  books.*
FROM
  books

С IIF функция, ние до голяма степен заместваме голяма част от синтактичната захар от CASE изявление с няколко прости разделители със запетая, за да разграничим нашите аргументи.

Всичко казано, и двата CASE и IIF свършите същата работа, но ако имате избор, IIF обикновено ще бъде много по-лесно за използване.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да преименувате база данни на SQL сървър с помощта на T-SQL

  2. Внедряване на пейджинг с помощта на OFFSET FETCH NEXT в SQL Server

  3. Как да актуализирате и поръчате с помощта на ms sql

  4. varbinary към низ на SQL Server

  5. 3 начина за изтриване на дублиращи се редове в SQL Server, като игнорирате първичния ключ