Alan boş olduğunda SQL Server Isnull 1900-01-01 döndürüyor


15

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),'')

5
Veri türlerini çok fazla karıştırıyorsunuz. Aslında NULLtarihlerle ne yaptığınızı söylüyor SELECT CAST('' AS DATE). Veri türü nedir DOB?
Mark Sinkinson

1
bugüne kadar dönüştürdüğüm bir varchar veri türü
Juan Velez

5
Bu eski bir yazı olduğunu biliyorum ama uygulama katmanı sizin için yapmasına izin vermek yerine SQL verileri biçimlendirmek için çalışıyoruz gibi görünüyor bahsetmeye değer. Uygulama katmanının biçimlendirmeyi yapmasına izin verdiğiniz zamanın% 99,9'u.
Erik

Yanıtlar:


21

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.


-3

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)

2
A ' 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.
Erik

Evet, senaryonuzda bir anlam ifade etmiyordu ama kullandığım senaryoda, 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.
Elvis Candelaria

1
Bu benim senaryom değil, sorunun senaryosu. Bu yüzden aşağı oy topladığınıza inanıyorum. Aslında farklı bir soruya cevap vermeye çalışıyorsunuz.
Erik

Evet haklısın. Bunu yanlış okudum. Benim hatam.
Elvis Candelaria

-3

Bu, NULL tarihini uzaya dönüştürür. Uygulama katmanı (Excel) boş alan işliyor

ISNULL (CONVERT(varchar(50), w.TRANSACTIONDT, 120), '')  as wTRANSACTIONDT

-3

Sadece bir görünüm oluşturun

GÖRÜNÜM test_view CREATE
AS
SEÇ durumda iken yıl (DOB) DOB olarak <= 1900 sonra boş başka DOB ucu, sometext, testin id;

ve bunun yerine orijinal tabloyu kullanın: test_view'dan * seçin


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.