java - 如何解决where name like '%%' 当name 为null时,查询不到数据?
PHP中文网
PHP中文网 2017-04-18 10:44:56
0
12
1815
PHP中文网
PHP中文网

认证0级讲师

membalas semua(12)
巴扎黑

PILIH

*

DARI

test

DI MANA

1 = 1

DAN NAMA SEPERTI concat(

'%',
(
    CASE
    WHEN NAME(传进来的name) IS NULL THEN
        '#################'(数据库name不可能的值)
    ELSE
        NAME(传进来的name)
    END
),
'%')

Saya menulis penyelesaian masalah untuk nama, anda boleh menyemak yang lain sendiri, ia mungkin bukan penyelesaian terbaik

迷茫

Anda boleh menulisnya dalam logik perniagaan, tidak semestinya dalam sql

大家讲道理

Saya tidak tahu sama ada rangka kerja pangkalan data digunakan. Jika ya, biasanya terdapat penyelesaian yang sepadan.
Sebagai contoh, dalam mybatis, anda boleh menggunakan iftest untuk menentukan sama ada pernyataan serupa perlu dilaksanakan.

Kaedah lain ialah menggunakan fungsi pangkalan data itu sendiri, seperti IF (expr1, expr2, expr3) atau IF ELSE

Peter_Zhu

Jika tiada parameter input di bahagian hadapan, mengapa kita perlu menanyakan hasil medan ini? Tidakkah ini melanggar logik perniagaan?

Peter_Zhu

where IFNULL(name, '') like'%xx%' and IFNULL(method, '') like '%xx%'
Jika name ialah null dan tukarkannya kepada empty string, maka %% akan sepadan.


Walau bagaimanapun, saya fikir cara terbaik ialah menggunakan SQL untuk menambah pertimbangan logik Jumlah perubahan sepatutnya sangat kecil, dan ia hanya memerlukan beberapa baris kod. Penanya boleh melihat SQL @家菜菜 dan menambah syarat where 1=1 maka ia akan menjadi sangat mudah untuk menambah syarat kepada syarat if.

左手右手慢动作

Sebaik-baiknya menulisnya dalam lapisan logik perniagaan (yang sepatutnya dilakukan oleh lapisan ini). Jangan mengendalikan perkara seperti ini dalam lapisan pangkalan data.

左手右手慢动作

Cara mudahnya ialah menukar nilai nol dalam jadual kepada ''
where ifnull(name,'') like'%%' and ifnull(method,'') like '%%'
Jika anda tidak menganggap kecekapan, ini tidak mengapa

Ty80

Penyoal hanya ingin menyambungkan syarat pertanyaan pada antara muka ke dalam keadaan Where bagi pernyataan SQL Ini sememangnya sangat mudah dalam pemprosesan program Walau bagaimanapun, atas sebab keselamatan, sebaiknya jangan lakukan ini kerana terdapat SQL risiko suntikan.

Jika ia adalah aplikasi dalaman, persekitaran sememangnya sangat selamat, memandangkan prestasi, ia masih disyorkan untuk menangani logik kod SQL tanpa parameter ini, jangan mengeja klausa mana yang sepadan. jika ia Java, ia boleh ditulis sebagai:

String whereClause = "where xxxxxx"
                     +("".equals(nameStr) ? "" : "name like '%"+nameStr+"%'")
                     +("".equals(methodStr) ? "" : "method like '%"+methodStr+"%'")

*Berikut adalah andaian:

  1. nameStr dan methodStr ialah kandungan input pengguna yang masing-masing diperoleh daripada antara muka Jika pengguna tidak memasukkan, hasilnya akan menjadi rentetan kosong dan bukannya nol

  2. .
  3. xxxxxx adalah syarat lain di mana Jika benar-benar tiada syarat lain, maka anda perlu berurusan dengan rentetan "di mana" itu sendiri*

刘奇

Jika nilai lalai pangkalan data adalah null, atau apabila nilai yang diperolehi adalah null, tukarkannya kepada nu. .

Peter_Zhu

di mana nama='' atau kaedah ='' atau nama seperti'%%' dan kaedah seperti '%%'

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan