Apakah mungkin untuk menggunakan klausa IF dalam klausa WHERE di MS SQL?
Contoh:
WHERE
IF IsNumeric(@OrderNumber) = 1
OrderNumber = @OrderNumber
ELSE
OrderNumber LIKE '%' + @OrderNumber + '%'
sql
sql-server
tsql
Bryan Roth
sumber
sumber
CASE
adalah solusi yang tepat dalam banyak kasus. Dalam kasus saya, saya ingin mengubah operator perbandingan dan karenanya saya menggunakan pendekatan berikutnya.Anda harus dapat melakukan ini tanpa JIKA atau KASUS
Tergantung pada rasa SQL Anda mungkin perlu mengubah gips pada nomor pesanan ke INT atau VARCHAR tergantung pada apakah gips implisit didukung.
Ini adalah teknik yang sangat umum dalam klausa WHERE. Jika Anda ingin menerapkan beberapa logika "JIKA" di klausa WHERE yang perlu Anda lakukan adalah menambahkan kondisi ekstra dengan boolean DAN ke bagian di mana ia perlu diterapkan.
sumber
Anda tidak membutuhkan pernyataan IF sama sekali.
sumber
where (@AdmUserId is null or CurrentOrder.CustomerAdmUserId = @AdmUserId)
Atau hanya filter jika IncludeDeleted = 0:where (@IncludeDeleted = 1 or ItemObject.DeletedFlag = 0)
Tidak ada cara yang baik untuk melakukan ini dalam SQL. Beberapa pendekatan yang saya lihat:
1) Gunakan CASE yang dikombinasikan dengan operator boolean:
2) Gunakan IF di luar SELECT
3) Menggunakan string panjang, buat pernyataan SQL Anda secara kondisional, dan kemudian gunakan EXEC
Pendekatan ke-3 mengerikan, tetapi hampir satu-satunya pemikiran yang berfungsi jika Anda memiliki sejumlah kondisi variabel seperti itu.
sumber
IF...ELSE...
persyaratan Anda menjadi booleanAND
danOR
seperti pada @ njr101 jawaban di atas. Kelemahan dari pendekatan ini adalah sulitnya otak jika Anda memiliki banyakIF
, atau jika Anda memiliki banyak yang bersarangGunakan pernyataan KASUS sebagai ganti IF.
sumber
Anda ingin pernyataan KASUS
sumber
Saya pikir di mana ... suka / = ... huruf ... maka ... dapat bekerja dengan Boolean. Saya menggunakan T-SQL.
Skenario: Katakanlah Anda ingin mendapatkan hobi Person-30 jika bool salah, dan hobi Person-42 jika bool benar. (Menurut beberapa orang, pencarian hobi mencakup lebih dari 90% siklus perhitungan bisnis, jadi perhatikan baik-baik.).
sumber
sumber
IF P THEN Q ELSE R
<=>
( ( NOT P ) OR Q ) AND ( P OR R )
sumber
Dalam kondisi line case akan bekerja dengan baik.
sumber
Contoh berikut mengeksekusi kueri sebagai bagian dari ekspresi Boolean dan kemudian mengeksekusi blok pernyataan yang sedikit berbeda berdasarkan hasil dari ekspresi Boolean. Setiap blok pernyataan dimulai dengan BEGIN dan dilengkapi dengan END.
Menggunakan pernyataan IF ... ELSE bersarang Contoh berikut menunjukkan bagaimana pernyataan IF ... ELSE dapat bersarang di dalam yang lain. Atur variabel @Number ke 5, 50, dan 500 untuk menguji setiap pernyataan.
sumber
Dalam sql server saya punya masalah yang sama saya ingin menggunakan dan pernyataan hanya jika parameter salah dan benar saya harus menunjukkan nilai benar dan salah jadi saya menggunakannya dengan cara ini
sumber
Lihat apakah ini membantu.
sumber
sumber