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?
(e.g. null or '' or ' ' or ' ' and ...)
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?
(e.g. null or '' or ' ' or ' ' and ...)
Jawaban:
Ini akan memilih semua baris mana some_col
adalah NULL
atau ''
(string kosong)
SELECT * FROM table WHERE some_col IS NULL OR some_col = '';
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
'' = ' ' IS TRUE
'' = ' ' IS TRUE
' ' = ' ' IS TRUE
' ' = ' ' IS TRUE
etc
Oleh karena itu, ini harus berfungsi terlepas dari berapa banyak ruang membuat some_col
nilai:
SELECT *
FROM T
WHERE some_col IS NULL
OR some_col = ' ';
atau lebih ringkas:
SELECT *
FROM T
WHERE NULLIF(some_col, ' ') IS NULL;
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 <> ' ';
dan SELECT * 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:
WHERE some_col > ''
Sejak null > ''
diproduksi unknown
, ini memiliki efek menyaring null
string baik dan kosong.
coalesce(some_col, '') = ''
Anda dapat menguji apakah suatu kolom adalah nol atau bukan nol menggunakan WHERE col IS NULL
atau WHERE col IS NOT NULL
misalnya
SELECT myCol
FROM MyTable
WHERE MyCol IS NULL
Dalam contoh Anda, Anda memiliki berbagai permutasi ruang putih. Anda dapat menghapus ruang putih menggunakan TRIM
dan Anda dapat menggunakan COALESCE
nilai 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 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:
SELECT myCol
FROM MyTable
WHERE MyCol IS NULL OR MyCol = ''
Lihat TRIM COALESCE dan IS NULL untuk info lebih lanjut.
Juga Bekerja dengan nilai nol dari dokumen MySQL
)
sebelum =
tanda pada contoh kedua Anda
Metode lain tanpa WHERE, coba ini ..
Akan memilih nilai Kosong dan NULL
SELECT ISNULL(NULLIF(fieldname,'')) FROM tablename
Antara
SELECT IF(field1 IS NULL or field1 = '', 'empty', field1) as field1 from tablename
atau
SELECT case when field1 IS NULL or field1 = ''
then 'empty'
else field1
end as 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=NULL WHERE MyColumn='';
SELECT * FROM MyTable WHERE MyColumn IS NULL
Ini membuat data tetap rapi, selama Anda tidak perlu membedakan antara NULL dan kosong karena alasan tertentu.
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: -
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 FirstName
dari UserDetails
tabel jika memiliki yang kosongLastName
Berharap ini akan membantu Anda :)
SELECT * FROM tbl WHERE trim(IFNULL(col,'')) <> '';
col1 != IFNULL(col2,'')
Periksa nol
$column is null
isnull($column)
Periksa kosong
$column != ""
Namun, Anda harus selalu mengatur TIDAK NULL untuk kolom,
optimasi mysql hanya dapat menangani satu tingkat IS NULL
NULL
nilai adalah keseluruhan topik untuk dibahas. Saya pikir itu tidak pantas untuk membuat rekomendasi itu tanpa memberikan alasan Anda.
-1
dan ''
.
select * from table where length(RTRIM(LTRIM(column_name))) > 0
RTRIM
dan LTRIM
, tetapi tidak TRIM
?
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
coba ini jika datatype adalah string dan baris adalah nol
SELECT * FROM table WHERE column_name IS NULL OR column_name = ''
jika datatype int atau kolom 0 maka coba ini
SELECT * FROM table WHERE column_name > = 0
select isnull(mycolumn) from mytable
mengembalikan 1 jika kolom saya nol.