Bagaimana cara memeriksa apakah kolom kosong atau nol di MySQL?
288
Saya memiliki kolom di tabel yang mungkin berisi nilai nol atau kosong. Bagaimana cara memeriksa apakah kolom kosong atau nol di baris yang ada di tabel?
Jika Anda mengubah kondisi menjadi WHERE some_col IS NULL OR some_col = ' '(satu spasi dimasukkan dalam string) maka itu berfungsi pada MySQL dan Oracle, lihat jawaban "onedaywhen". some_col = ''tidak berfungsi pada Oracle karena string kosong berarti NULL di sana.
Johanna
1
@Johanna tetapi jika Anda beralih ke ' ', maka itu tidak akan berfungsi di SQLite. Ini hanya menangani pencocokan string identik / langsung.
Magne
131
Seperti yang didefinisikan oleh SQL-92 Standard, ketika membandingkan dua string dengan lebar yang berbeda, nilai yang lebih sempit adalah benar-empuk dengan spasi untuk membuatnya sama lebar dengan nilai yang lebih luas. Oleh karena itu, semua nilai string yang seluruhnya terdiri dari spasi (termasuk spasi nol) akan dianggap sama, mis
Terima kasih telah menyebutkan ruang yang empuk. Anda dapat mengambil untung dari mereka dan mengubah kondisinya menjadi WHERE some_col IS NULL OR some_col = ' '(satu ruang dimasukkan ke dalam string) kemudian bekerja pada MySQL dan Oracle. some_col = ''tidak berfungsi pada Oracle karena string kosong berarti NULL di sana dan kondisi lengkap menjadi NULL.
Johanna
Persyaratan saya adalah menemukan SELECT * FROM T WHERE some_col IS NOT NULL OR same_col <> ' '; dan SELECT * FROM T WHERE NULLIF(some_col, ' ') IS NOT NULL;bekerja untuk saya di MySQL. Semoga ini bermanfaat.
Dinuka Dayarathna
Sebenarnya '' = ' 'bekerja di SQLServer tetapi tidak dalam SQLite, sejauh yang saya tahu, dari mengujinya sekarang.
Magne
66
Cara yang lebih singkat untuk menulis kondisi:
WHERE some_col >''
Sejak null > ''diproduksi unknown, ini memiliki efek menyaring nullstring baik dan kosong.
Apakah ada cara untuk mendapatkan kebalikan dari ini, mendapatkan semua catatan di mana NULL atau string kosong?
Joshua Pinter
14
@JoshPinter:coalesce(some_col, '') = ''
Andomar
6
Ini mungkin benar kadang-kadang, tetapi tidak berfungsi di MySQL 14.14.
Gunnar Þór Magnússon
berfungsi dengan baik dan pada kenyataannya satu-satunya cara saya bisa mengetahui cara memfilter bidang kosong dan kosong di MariaDB
Neal Davis
1
Saya menggunakan some_col <> '' untuk menemukan kebalikan dari ini
Chargnn
18
Anda dapat menguji apakah suatu kolom adalah nol atau bukan nol menggunakan WHERE col IS NULLatau WHERE col IS NOT NULLmisalnya
SELECT myCol
FROM MyTable
WHERE MyCol ISNULL
Dalam contoh Anda, Anda memiliki berbagai permutasi ruang putih. Anda dapat menghapus ruang putih menggunakan TRIMdan Anda dapat menggunakan COALESCEnilai NULL default (COALESCE akan mengembalikan nilai non-nol pertama dari nilai yang Anda berikan.
misalnya
SELECT myCol
FROM MyTable
WHERE TRIM(COALESCE(MyCol,'')=''
Kueri terakhir ini akan mengembalikan baris di mana MyColnol atau panjang spasi apa pun.
Jika Anda bisa menghindarinya, lebih baik tidak memiliki fungsi pada kolom di klausa WHERE karena itu membuat sulit untuk menggunakan indeks. Jika Anda hanya ingin memeriksa apakah kolomnya nol atau kosong, Anda sebaiknya melakukan ini:
SELECT myCol
FROM MyTable
WHERE MyCol ISNULLOR MyCol =''
Anda menyajikan solusi nyata dengan cara yang sangat berbelit-belit. Pertama, Anda menyajikan solusi yang tidak lengkap untuk masalahnya "di mana mycol adalah nol". Kemudian Anda menyajikan solusi menggunakan dua fungsi bersarang di klausa mana, bahkan ketika mengatakan ini harus dihindari. Baru setelah itu Anda mendapatkan solusi nyata. Di masa depan, presentasikan solusi nyata Anda terlebih dahulu.
ini mengembalikan 1 jika ada sesuatu yang nol, mengapa begitu?
noobie-php
NULLIF memeriksa fieldname untuk nilai kosong dan akan dikonversi ke NULL jika kosong. ISNULL mengembalikan 1 (benar) jika NULLIF berhasil mengubah bidang kosong menjadi NULL atau jika sudah NULL .... coba sendiri pada bidang nol dan kosong dalam tabel dengan dua fungsi pilih isnull (X) , pilih nullif (y)
PodTech.io
9
Antara
SELECTIF(field1 ISNULLor field1 ='','empty', field1)as field1 from tablename
atau
SELECTcasewhen field1 ISNULLor field1 =''then'empty'else field1
endas field1 from tablename
Saya benci bidang yang berantakan di database saya. Jika kolomnya berupa string kosong atau nol, saya lebih suka memperbaikinya sebelum melakukan pemilihan setiap kali, seperti ini:
UPDATE MyTable SET MyColumn=NULLWHERE MyColumn='';SELECT*FROM MyTable WHERE MyColumn ISNULL
Ini membuat data tetap rapi, selama Anda tidak perlu membedakan antara NULL dan kosong karena alasan tertentu.
Saat memeriksa null or Emptynilai untuk kolom di proyek saya, saya perhatikan bahwa ada beberapa masalah dukungan di berbagai Database.
Setiap Database tidak mendukung TRIM metode.
Di bawah ini adalah matriks hanya untuk memahami metode yang didukung oleh basis data yang berbeda.
Fungsi TRIM dalam SQL digunakan untuk menghapus awalan atau akhiran yang ditentukan dari string. Pola paling umum yang dihapus adalah spasi putih. Fungsi ini dipanggil secara berbeda di database yang berbeda:
MySQL:TRIM(), RTRIM(), LTRIM()
Peramal:RTRIM(), LTRIM()
SQL Server:RTRIM(), LTRIM()
Cara Memeriksa Kosong / Null: -
Di bawah ini adalah dua cara berbeda menurut Database yang berbeda-
Sintaks untuk fungsi trim ini adalah:
Gunakan Trim untuk memeriksa-
SELECT FirstName FROM UserDetails WHERE TRIM(LastName) IS NULL
Gunakan LTRIM & RTRIM untuk memeriksa-
SELECT FirstName FROM UserDetails WHERE LTRIM(RTRIM(LastName)) IS NULL
Di atas kedua cara memberikan hasil yang sama gunakan saja berdasarkan dukungan DataBase Anda. Itu hanya mengembalikan FirstNamedari UserDetailstabel jika memiliki yang kosongLastName
Tidak pernah menerima NULLnilai adalah keseluruhan topik untuk dibahas. Saya pikir itu tidak pantas untuk membuat rekomendasi itu tanpa memberikan alasan Anda.
maček
Saya memang termasuk, bersabarlah. Plus benar-benar membuat hidup sulit menggunakan NULL (seperti pertanyaan ini).
ajreal
5
Itu rekomendasi yang mengerikan. Pengaturan NOT NULL pada kolom yang nilainya mungkin tidak diketahui pada saat INSERT hanya berfungsi untuk mendorong penggunaan nilai "null" non-standar seperti -1dan ''.
Dan Bechard
@Dan jika Anda tidak yakin berapa nilainya selama penyisipan, Anda mungkin mengalami kesulitan untuk melakukan optimasi possilbe
Apa gunanya menggunakan keduanya RTRIMdan LTRIM, tetapi tidak TRIM?
Nico Haase
0
Dalam kasus saya, spasi dimasukkan dalam kolom selama impor data dan meskipun tampak seperti kolom kosong panjangnya adalah 1. Jadi pertama-tama saya memeriksa panjang kolom yang tampak kosong menggunakan length(column)kemudian berdasarkan ini kita dapat menulis permintaan pencarian
SELECT * FROM TABLE WHERE PANJANG (KOLOM) = panjang kolom untuk kolom kosong
select isnull(mycolumn) from mytable
mengembalikan 1 jika kolom saya nol.Jawaban:
Ini akan memilih semua baris mana
some_col
adalahNULL
atau''
(string kosong)sumber
WHERE some_col IS NULL OR some_col = ' '
(satu spasi dimasukkan dalam string) maka itu berfungsi pada MySQL dan Oracle, lihat jawaban "onedaywhen".some_col = ''
tidak berfungsi pada Oracle karena string kosong berarti NULL di sana.' '
, maka itu tidak akan berfungsi di SQLite. Ini hanya menangani pencocokan string identik / langsung.Seperti yang didefinisikan oleh SQL-92 Standard, ketika membandingkan dua string dengan lebar yang berbeda, nilai yang lebih sempit adalah benar-empuk dengan spasi untuk membuatnya sama lebar dengan nilai yang lebih luas. Oleh karena itu, semua nilai string yang seluruhnya terdiri dari spasi (termasuk spasi nol) akan dianggap sama, mis
Oleh karena itu, ini harus berfungsi terlepas dari berapa banyak ruang membuat
some_col
nilai:atau lebih ringkas:
sumber
WHERE some_col IS NULL OR some_col = ' '
(satu ruang dimasukkan ke dalam string) kemudian bekerja pada MySQL dan Oracle.some_col = ''
tidak berfungsi pada Oracle karena string kosong berarti NULL di sana dan kondisi lengkap menjadi NULL.SELECT * FROM T WHERE some_col IS NOT NULL OR same_col <> ' ';
danSELECT * FROM T WHERE NULLIF(some_col, ' ') IS NOT NULL;
bekerja untuk saya di MySQL. Semoga ini bermanfaat.'' = ' '
bekerja di SQLServer tetapi tidak dalam SQLite, sejauh yang saya tahu, dari mengujinya sekarang.Cara yang lebih singkat untuk menulis kondisi:
Sejak
null > ''
diproduksiunknown
, ini memiliki efek menyaringnull
string baik dan kosong.sumber
coalesce(some_col, '') = ''
Anda dapat menguji apakah suatu kolom adalah nol atau bukan nol menggunakan
WHERE col IS NULL
atauWHERE col IS NOT NULL
misalnyaDalam contoh Anda, Anda memiliki berbagai permutasi ruang putih. Anda dapat menghapus ruang putih menggunakan
TRIM
dan Anda dapat menggunakanCOALESCE
nilai NULL default (COALESCE akan mengembalikan nilai non-nol pertama dari nilai yang Anda berikan.misalnya
Kueri terakhir ini akan mengembalikan baris di mana
MyCol
nol atau panjang spasi apa pun.Jika Anda bisa menghindarinya, lebih baik tidak memiliki fungsi pada kolom di klausa WHERE karena itu membuat sulit untuk menggunakan indeks. Jika Anda hanya ingin memeriksa apakah kolomnya nol atau kosong, Anda sebaiknya melakukan ini:
Lihat TRIM COALESCE dan IS NULL untuk info lebih lanjut.
Juga Bekerja dengan nilai nol dari dokumen MySQL
sumber
)
sebelum=
tanda pada contoh kedua AndaMetode lain tanpa WHERE, coba ini ..
Akan memilih nilai Kosong dan NULL
sumber
Antara
atau
sumber
Saya benci bidang yang berantakan di database saya. Jika kolomnya berupa string kosong atau nol, saya lebih suka memperbaikinya sebelum melakukan pemilihan setiap kali, seperti ini:
Ini membuat data tetap rapi, selama Anda tidak perlu membedakan antara NULL dan kosong karena alasan tertentu.
sumber
mencoba
atau
Referensi
sumber
Pernyataan ini jauh lebih bersih dan lebih mudah dibaca untuk saya:
sumber
Saat memeriksa
null or Empty
nilai untuk kolom di proyek saya, saya perhatikan bahwa ada beberapa masalah dukungan di berbagai Database.Setiap Database tidak mendukung
TRIM
metode.Di bawah ini adalah matriks hanya untuk memahami metode yang didukung oleh basis data yang berbeda.
Fungsi TRIM dalam SQL digunakan untuk menghapus awalan atau akhiran yang ditentukan dari string. Pola paling umum yang dihapus adalah spasi putih. Fungsi ini dipanggil secara berbeda di database yang berbeda:
TRIM(), RTRIM(), LTRIM()
RTRIM(), LTRIM()
RTRIM(), LTRIM()
Cara Memeriksa Kosong / Null: -
Sintaks untuk fungsi trim ini adalah:
Gunakan Trim untuk memeriksa-
SELECT FirstName FROM UserDetails WHERE TRIM(LastName) IS NULL
Gunakan LTRIM & RTRIM untuk memeriksa-
SELECT FirstName FROM UserDetails WHERE LTRIM(RTRIM(LastName)) IS NULL
Di atas kedua cara memberikan hasil yang sama gunakan saja berdasarkan dukungan DataBase Anda. Itu hanya mengembalikan
FirstName
dariUserDetails
tabel jika memiliki yang kosongLastName
Berharap ini akan membantu Anda :)
sumber
Jika Anda ingin agar nilai NULL disajikan terakhir saat melakukan ORDER BY, coba ini:
sumber
Anda juga bisa melakukannya
Makhluk yang terbalik
sumber
select NULL like ''
mengembalikanNULL
- setidaknya di MySQL.sumber
col1 != IFNULL(col2,'')
Periksa nol
Periksa kosong
Namun, Anda harus selalu mengatur TIDAK NULL untuk kolom,
optimasi mysql hanya dapat menangani satu tingkat IS NULL
sumber
NULL
nilai adalah keseluruhan topik untuk dibahas. Saya pikir itu tidak pantas untuk membuat rekomendasi itu tanpa memberikan alasan Anda.-1
dan''
.sumber
RTRIM
danLTRIM
, tetapi tidakTRIM
?Dalam kasus saya, spasi dimasukkan dalam kolom selama impor data dan meskipun tampak seperti kolom kosong panjangnya adalah 1. Jadi pertama-tama saya memeriksa panjang kolom yang tampak kosong menggunakan
length(column)
kemudian berdasarkan ini kita dapat menulis permintaan pencariansumber
coba ini jika datatype adalah string dan baris adalah nol
jika datatype int atau kolom 0 maka coba ini
sumber
sumber
NULL
.