Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Menggunakan Pernyataan CASE dengan betul dalam SQL Server 2008 WHERE Klausa?

Bagaimana untuk Menggunakan Pernyataan CASE dengan betul dalam SQL Server 2008 WHERE Klausa?

Linda Hamilton
Lepaskan: 2025-01-11 10:24:41
asal
733 orang telah melayarinya

How to Correctly Use CASE Statements in SQL Server 2008 WHERE Clauses?

SQL Server 2008 WHERE Klausa: Penggunaan Penyata KES yang Betul

Menggunakan pernyataan CASE dalam SQL Server 2008 WHERE klausa menuntut sintaks yang tepat untuk pelaksanaan yang betul. Yang berikut menggambarkan ralat biasa dan penyelesaiannya.

Contoh peletakan pernyataan CASE yang salah dalam klausa WHERE:

<code class="language-sql">WHERE 
    CASE LEN('TestPerson')
        WHEN 0 THEN co.personentered  = co.personentered
        ELSE co.personentered LIKE '%TestPerson'
    END 
    AND cc.ccnum = CASE LEN('TestFFNum')
        WHEN 0 THEN cc.ccnum 
        ELSE 'TestFFNum' 
    END </code>
Salin selepas log masuk

Masalahnya ialah percubaan untuk menetapkan nilai dalam pernyataan CASE menggunakan = atau LIKE. Pernyataan CASE hendaklah digunakan untuk penjanaan nilai bersyarat, bukan penugasan. Pendekatan yang diperbetulkan menggunakan logik Boolean:

<code class="language-sql">WHERE (LEN('TestPerson') = 0 AND co.personentered = co.personentered)
   OR (LEN('TestPerson') > 0 AND co.personentered LIKE '%TestPerson')</code>
Salin selepas log masuk

Pertanyaan yang disemak ini menilai keadaan dengan betul berdasarkan panjang 'TestPerson'.

Perbandingan tarikh juga memerlukan pertimbangan yang teliti. Daripada berbilang kenyataan CASE bersarang, menggunakan keadaan ATAU yang berasingan selalunya lebih jelas dan lebih cekap:

<code class="language-sql">WHERE (LEN('2011-01-09 11:56:29.327') = 0 AND co.DTEntered = co.DTEntered)
   OR (LEN('2011-01-09 11:56:29.327') > 0 AND LEN('2012-01-09 11:56:29.327') = 0 AND co.DTEntered >= '2011-01-09 11:56:29.327')
   OR (LEN('2011-01-09 11:56:29.327') > 0 AND LEN('2012-01-09 11:56:29.327') > 0 AND co.DTEntered BETWEEN '2011-01-09 11:56:29.327' AND '2012-01-09 11:56:29.327')</code>
Salin selepas log masuk

Dengan menggunakan sintaks yang diperbetulkan ini, pertanyaan SQL Server 2008 anda yang menggabungkan pernyataan CASE dalam klausa WHERE akan dilaksanakan seperti yang dimaksudkan.

Atas ialah kandungan terperinci Bagaimana untuk Menggunakan Pernyataan CASE dengan betul dalam SQL Server 2008 WHERE Klausa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan