Bagaimana mengembalikan nilai boolean pada SQL Select Statement?
Saya mencoba kode ini:
SELECT CAST(1 AS BIT) AS Expr1
FROM [User]
WHERE (UserID = 20070022)
Dan itu hanya kembali TRUE
jika UserID
ada di atas meja. Saya ingin mengembalikan FALSE
jika UserID
tidak ada di atas meja.
SELECT WHEN CAST(1 AS BIT) THEN 'YES' END AS result
- menghasilkan kesalahan yaituCAST(1 AS BIT)
tidak BENAR logis yang sama.Jawaban:
Apa yang Anda miliki di sana tidak akan mengembalikan baris sama sekali jika pengguna tidak ada. Inilah yang Anda butuhkan:
sumber
1
bukan*
.*
lebih idiomatis. Lihat pertanyaan ini .AS bool
bagian ini sangat penting):CAST( CASE WHEN EXISTS ( SELECT * FROM mytable WHERE mytable.id = 1) THEN TRUE ELSE FALSE END AS bool) AS nameofmycolumn
Mungkin ada sesuatu di sepanjang baris ini:
http://sqlfiddle.com/#!3/5e555/1
sumber
Mengingat bahwa secara umum
1 = true
dan0 = false
, yang perlu Anda lakukan adalah menghitung jumlah baris, dan dilemparkan ke aboolean
.Karenanya, kode Anda yang diposting hanya perlu
COUNT()
fungsi yang ditambahkan:sumber
Exists(
tes jauh lebih cepat daripada melakukanCount(1)
tes di atas meja dengan banyak baris.UserID
diindeks (atau bahkan PK) pasti Anda akan langsung ke satu baris unik yang ada (atau tidak).Gunakan 'Ada' yang mengembalikan 0 atau 1.
Kueri akan seperti:
sumber
Jika hitung (*) = 0 menghasilkan false. Jika hitung (*)> 0 mengembalikan true.
sumber
Saya melakukannya seperti ini:
Melihat sebagai boolean tidak pernah bisa menjadi nol (setidaknya dalam. NET), itu harus default ke false atau Anda dapat mengaturnya sendiri jika defaultnya benar. Namun 1 = benar, jadi null = salah, dan tidak ada sintaks tambahan.
Catatan: Saya menggunakan Dapper sebagai mikro saya, saya akan membayangkan ADO harus bekerja sama.
sumber
Perhatikan masalah lain yang setara: Membuat kueri SQL yang mengembalikan (1) jika kondisi terpenuhi dan hasil kosong sebaliknya. Perhatikan bahwa solusi untuk masalah ini lebih umum dan dapat dengan mudah digunakan dengan jawaban di atas untuk mencapai pertanyaan yang Anda ajukan. Karena masalah ini lebih umum, saya membuktikan solusinya selain solusi indah yang disajikan di atas untuk masalah Anda.
sumber
Bagi Anda yang tertarik untuk mendapatkan nilai dengan menambahkan nama kolom khusus, ini berhasil bagi saya:
Anda dapat melewati tanda kutip ganda dari nama kolom jika Anda tidak tertarik menjaga sensitivitas huruf besar-kecilnya nama (pada beberapa klien).
Saya sedikit mengutak-atik jawaban Chad untuk ini.
sumber
awalnya adalah nilai boolean yang tersedia diatur ke 0
sumber