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ü DATEDeğ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 NULLtarih NULL(değer yok). Öte yandan, boş bir dize, 0SQL 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)
VARCHARya DATEve' 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.
datetimesadece bir tarihle başladım YYYY-MM-DD. Böylece döküm dateyaparak zamanı düşürdüm. Daha sonra döküm fonksiyonun varcharkullanı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
NULLtarihlerle ne yaptığınızı söylüyorSELECT CAST('' AS DATE). Veri türü nedirDOB?