Boş veya boş değerler içeren bir tabloda bir sütun var. Bir tabloda bulunan satırlarda bir sütunun boş veya boş olup olmadığını nasıl kontrol edebilirim?
(e.g. null or '' or ' ' or ' ' and ...)
Boş veya boş değerler içeren bir tabloda bir sütun var. Bir tabloda bulunan satırlarda bir sütunun boş veya boş olup olmadığını nasıl kontrol edebilirim?
(e.g. null or '' or ' ' or ' ' and ...)
Yanıtlar:
Bu some_col
, NULL
veya ''
(boş dize) olan tüm satırları seçer
SELECT * FROM table WHERE some_col IS NULL OR some_col = '';
WHERE some_col IS NULL OR some_col = ' '
(dizeye eklenen bir boşluk) olarak değiştirirseniz hem MySQL hem de Oracle üzerinde çalışır, "onedaywhen" yanıtına bakın. some_col = ''
boş dizeler NULL anlamına gelir çünkü Oracle üzerinde çalışmaz.
' '
, SQLite çalışmaz. Yalnızca özdeş / doğrudan dize eşleşmesini işler.
SQL-92 Standardında tanımlandığı gibi, farklı genişlikteki iki dizeyi karşılaştırırken, daha dar değer, daha geniş değerle aynı genişliğe sahip olması için boşluklarla sağa doldurulur. Bu nedenle, tamamen boşluklardan (sıfır boşluklar dahil) oluşan tüm dize değerlerinin eşit olduğu kabul edilir;
'' = ' ' IS TRUE
'' = ' ' IS TRUE
' ' = ' ' IS TRUE
' ' = ' ' IS TRUE
etc
Bu nedenle, bu some_col
değer kaç boşluk oluşturduğuna bakılmaksızın çalışmalıdır :
SELECT *
FROM T
WHERE some_col IS NULL
OR some_col = ' ';
veya daha özlü bir şekilde:
SELECT *
FROM T
WHERE NULLIF(some_col, ' ') IS NULL;
WHERE some_col IS NULL OR some_col = ' '
(dizeye eklenen bir boşluk) olarak değiştirebilirsiniz, daha sonra hem MySQL hem de Oracle üzerinde çalışır. some_col = ''
boş dizeler NULL anlamına gelir ve tüm koşul NULL olur, Oracle üzerinde çalışmaz.
SELECT * FROM T WHERE some_col IS NOT NULL OR same_col <> ' ';
ve SELECT * FROM T WHERE NULLIF(some_col, ' ') IS NOT NULL;
MySQL benim için çalıştı. Umarım faydalı olacaktır.
'' = ' '
SQLServer'da çalışıyor, ancak SQLite'de değil, anlayabildiğim kadarıyla şimdi test etmekten.
Durumu yazmanın daha kısa bir yolu:
WHERE some_col > ''
Yana null > ''
üretir unknown
, bu ikisi filtreleyerek etkisine sahiptir null
ve boş dizeleri.
coalesce(some_col, '') = ''
Bir sütunun boş olup olmadığını WHERE col IS NULL
veya WHERE col IS NOT NULL
örn.
SELECT myCol
FROM MyTable
WHERE MyCol IS NULL
Örneğinizde çeşitli beyaz boşluk permütasyonlarına sahipsiniz. Kullanarak beyaz boşluğu şeritleyebilir TRIM
ve COALESCE
bir NULL değerini varsayılan olarak kullanabilirsiniz (COALESCE, ilk boş değerli olmayan değeri, verdiğiniz değerlerden döndürür.
Örneğin
SELECT myCol
FROM MyTable
WHERE TRIM(COALESCE(MyCol, '') = ''
Bu son sorgu MyCol
boş veya herhangi bir boşluk uzunluğundaki satırları döndürür .
Bundan kaçınabiliyorsanız, WHERE yan tümcesindeki bir sütunda bir işlevin bulunmaması daha iyi olur, çünkü dizin kullanımını zorlaştırır. Bir sütunun boş olup olmadığını kontrol etmek istiyorsanız, bunu yapmak daha iyi olabilir:
SELECT myCol
FROM MyTable
WHERE MyCol IS NULL OR MyCol = ''
Daha fazla bilgi için bkz. TRIM COALESCE ve IS NULL .
Ayrıca MySQL belgelerindeki boş değerlerle çalışma
)
=
WHERE'siz başka bir yöntem, bunu deneyin ..
Hem Boş hem de NULL değerleri seçer
SELECT ISNULL(NULLIF(fieldname,'')) FROM tablename
ya
SELECT IF(field1 IS NULL or field1 = '', 'empty', field1) as field1 from tablename
veya
SELECT case when field1 IS NULL or field1 = ''
then 'empty'
else field1
end as field1 from tablename
Veritabanlarımdaki dağınık alanlardan nefret ediyorum. Sütun boş bir dize veya boş olabilirse, her seferinde seçim yapmadan önce bunu düzeltmeyi tercih ederim, şöyle:
UPDATE MyTable SET MyColumn=NULL WHERE MyColumn='';
SELECT * FROM MyTable WHERE MyColumn IS NULL
Bu, NULL ile boş arasında bir ayrım yapmanıza gerek olmadığı sürece verileri düzenli tutar.
Projemdeki null or Empty
bir sütunun değerini kontrol ederken , çeşitli Veritabanlarında bazı destek endişeleri olduğunu fark ettim.
Her Veritabanı desteklemez TRIM
yöntem.
Aşağıda sadece farklı veritabanları tarafından desteklenen yöntemleri anlama matrisi verilmiştir.
SQL'deki TRIM işlevi, bir dizeden belirtilen öneki veya soneki kaldırmak için kullanılır. Kaldırılan en yaygın desen beyaz boşluklardır. Bu işlev farklı veritabanlarında farklı şekilde adlandırılır:
TRIM(), RTRIM(), LTRIM()
RTRIM(), LTRIM()
RTRIM(), LTRIM()
Boş / Boş Nasıl Kontrol Edilir: -
Aşağıda, farklı Veritabanlarına göre iki farklı yol vardır.
Bu kırpma işlevlerinin sözdizimi:
Kontrol etmek için Trim kullanımı
SELECT FirstName FROM UserDetails WHERE TRIM(LastName) IS NULL
Kontrol etmek için LTRIM ve RTRIM kullanımı
SELECT FirstName FROM UserDetails WHERE LTRIM(RTRIM(LastName)) IS NULL
Her iki yolun da üstünde, aynı sonucu yalnızca DataBase desteğinizi temel alarak kullanın. Boş bir tablo varsa , FirstName
yalnızca UserDetails
tablodan dönerLastName
Bunun size yardımcı olacağını umuyoruz :)
ORDER BY yaparken NULL değerlerin en son sunulmasını istiyorsanız, şunu deneyin:
SELECT * FROM my_table WHERE NULLIF(some_col, '') IS NULL;
SELECT * FROM tbl WHERE trim(IFNULL(col,'')) <> '';
col1 != IFNULL(col2,'')
Boş olup olmadığını kontrol et
$column is null
isnull($column)
Boş olup olmadığını kontrol edin
$column != ""
Ancak, sütun için her zaman NOT NULL ayarlamanız gerekir,
mysql optimizasyonu yalnızca bir IS NULL düzeyi işleyebilir
NULL
Değerleri asla kabul etmemek tartışmanın bir başka konusudur. Akıl yürütmenizi sağlamadan bu tavsiyeyi yapmanın uygun olduğunu düşünmüyorum.
-1
ve gibi standart olmayan "null" değerlerin kullanılmasını teşvik etmeye yarar ''
.
select * from table where length(RTRIM(LTRIM(column_name))) > 0
RTRIM
ve LTRIM
ancak TRIM
?
Benim durumumda, veri içe aktarma sırasında sütuna boşluk girildi ve boş bir sütun gibi görünse de uzunluğu 1 idi. Bu yüzden önce boş görünümlü sütunun uzunluğunu kontrol ettikten length(column)
sonra buna göre arama sorgusu yazabiliriz
SEÇ * TABLO UZUNLUĞUNDA (SÜTUN) = boş sütun için sütun uzunluğu
veri türü dize ve satır boşsa bunu deneyin
SELECT * FROM table WHERE column_name IS NULL OR column_name = ''
veri türü int veya sütun 0 ise bunu deneyin
SELECT * FROM table WHERE column_name > = 0
select isnull(mycolumn) from mytable
mycolumn boşsa 1 döndürür.