cari

Rumah  >  Soal Jawab  >  teks badan

java - 如何解决where name like '%%' 当name 为null时,查询不到数据?

PHP中文网PHP中文网2802 hari yang lalu1809

membalas semua(12)saya akan balas

  • 巴扎黑

    巴扎黑2017-04-18 10:46:56

    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

    balas
    0
  • 迷茫

    迷茫2017-04-18 10:46:56

    Anda boleh menulisnya dalam logik perniagaan, tidak semestinya dalam sql

    balas
    0
  • 大家讲道理

    大家讲道理2017-04-18 10:46:56

    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

    balas
    0
  • 天蓬老师

    天蓬老师2017-04-18 10:46:56

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

    balas
    0
  • 天蓬老师

    天蓬老师2017-04-18 10:46:56

    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.

    balas
    0
  • ringa_lee

    ringa_lee2017-04-18 10:46:56

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

    balas
    0
  • ringa_lee

    ringa_lee2017-04-18 10:46:56

    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

    balas
    0
  • PHP中文网

    PHP中文网2017-04-18 10:46:56

    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*

    balas
    0
  • 怪我咯

    怪我咯2017-04-18 10:46:56

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

    balas
    0
  • 天蓬老师

    天蓬老师2017-04-18 10:46:56

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

    balas
    0
  • Batalbalas