DOB alanı boş olduğunda aşağıdaki kod parçası 1900-01-01 döndürüyor. Boş bir dize ('') döndürmesini istedim (ve bekledim) ama değil. İstediğim sonuçları almaya nasıl devam etmeliyim?
isnull(convert(date,DOB,1),'')
DOB alanı boş olduğunda aşağıdaki kod parçası 1900-01-01 döndürüyor. Boş bir dize ('') döndürmesini istedim (ve bekledim) ama değil. İstediğim sonuçları almaya nasıl devam etmeliyim?
isnull(convert(date,DOB,1),'')
Yanıtlar:
Boş bir dize alamazsınız çünkü DATE
Değer türünüISNULL
.
MSDN başına ,ISNULL
Check_expression ile aynı türü döndürür.Değişken NULL, check_expression olarak sağlanırsa, replacement_value veri tipini döndürür. Değişken NULL, check_expression olarak sağlanırsa ve replacement_value sağlanmazsa, bir int döndürür.
Değerin olup olmadığını kontrol ediyorsanız NULL
(tarih gibi görünmüyorsa) bir tarih değeri döndürmek bir tarihe dönüştürülmesine gerek yoktur.
Bunun yerine şunu kullanın:
SELECT ISNULL( DOB , '')
Hangisi geri dönecek
''
eğer değer NULL
.
Bir NULL
tarih NULL
(değer yok). Öte yandan, boş bir dize, 0
SQL Server'da o zamandan beri geçen gün sayısını temsil eden bir tamsayı olarak değerlendirilir 1900-01-01
.
Doldurulduğunda DOB için bir değer döndürmek ve doldurulmuş DOB olmadığında null değerini kaldırmak istiyorsanız. Bunu deneyebilirsiniz, ancak DOB bir tarih türü değil, bir varchar olacaktır.
isnull(cast(cast(DOB as date)as varchar),'') as DOB (SQL SERVER)
VARCHAR
ya DATE
ve' a 'geri VARCHAR
çevirmek hiç mantıklı değil. Bu saçmalığı kaldırdığınızda cevabınız, daha az açıklama ile kabul edilen cevapla aynıdır.
datetime
sadece bir tarihle başladım YYYY-MM-DD
. Böylece döküm date
yaparak zamanı düşürdüm. Daha sonra döküm fonksiyonun varchar
kullanımına izin verir isnull
. Bu yüzden hala doldurulmuş kayıtlar için bir tarih alıyorum ve null değerleri kaldırıyorum. Aksi halde alıyordum 1900-01-01 00:00:00.000
.
kullanım
isnull seçin (Dönüştür (Varchar (500), Tarih, 106), '')
işe yarıyor
NULL
tarihlerle ne yaptığınızı söylüyorSELECT CAST('' AS DATE)
. Veri türü nedirDOB
?