Melalui NULL

Banyak orang tahu dan menggunakan fungsi bawaan ISNULL (X, Y), yang menggantikan argumen pertama dengan yang kedua jika itu adalah (pertama) NULL. Yang kurang umum digunakan adalah fungsi built-in terbalik NULLIF (X, Y), yang mengembalikan NULL jika argumen pertama sama dengan yang kedua. Kombinasi kedua fungsi ini menghindari penggunaan konstruksi IF-ELSE atau CASE-WHEN, yang membuat kode lebih kompak. Jika Anda tertarik untuk melihat beberapa contoh, selamat datang di kucing.

Sebagai contoh, berikut adalah kode yang menghasilkan 10 bilangan bulat acak dalam rentang dari 1 hingga 37, dan nilai terdekat yang sama dengan atau lebih besar dari angka yang ditampilkan adalah kelipatan dari 6.

SELECT Q.Src, CASE WHEN Q.Src % 6 = 0 THEN Q.Src ELSE Q.Src + (6 - Q.Src % 6) END AS NextTimes6 FROM ( SELECT TOP 10 CONVERT(INT, 1 + 37 * RAND(CHECKSUM(NEWID()))) Src FROM SYSOBJECTS S ) Q 

Anda dapat menghilangkan KASUS..Ketika melakukan trik berikut - membalikkan NULL hasil dari Q.Src% 6 jika sisanya adalah 0, mengetahui bahwa hasil dari operasi apa pun dengan NULL adalah NULL, dan kemudian mengembalikan NULL kembali ke 0 dengan fungsi eksternal ISNULL:

 SELECT Q.Src, Q.Src + ISNULL(6 - NULLIF(Q.Src % 6, 0), 0) AS NextTimes6 FROM ( SELECT TOP 10 CONVERT(INT, 1 + 37 * RAND(CHECKSUM(NEWID()))) Src FROM SYSOBJECTS S ) Q 

Contoh lain adalah membagi string menjadi dua bagian dengan spasi (misalnya, nama dari string Nama <spasi> Nama keluarga. Masalah khas di sini saat menyelesaikan "head on" adalah fungsi KIRI terhempas saat meneruskannya dengan argumen -1 sebagai nilai jumlah karakter yang akan dipotong dalam kasus ketika tidak ada ruang di baris sumber (CHARINDEX mengembalikan 0):

 SELECT Q.Src, CASE WHEN CHARINDEX(' ', Q.Src) > 0 THEN LEFT(Q.Src, CHARINDEX(' ', Q.Src) - 1) ELSE Q.Src END AS NameOnly FROM ( SELECT N' ' AS Src UNION ALL SELECT N'' ) Q 

Berubah menjadi:

 SELECT Q.Src, LEFT(Q.Src, ISNULL(NULLIF(CHARINDEX(' ', Q.Src), 0) - 1, LEN(Q.Src))) AS NameOnly FROM ( SELECT N' ' AS Src UNION ALL SELECT N'' ) Q 

Nikmati pemrograman SQL!

Source: https://habr.com/ru/post/id413747/


All Articles