Poniższy fragment kodu zwraca 1900-01-01, gdy pole DOB jest puste. Chciałem (i oczekiwałem), że zwróci pusty ciąg (''), ale tak nie jest. Jak powinienem uzyskać pożądane wyniki?
isnull(convert(date,DOB,1),'')
Poniższy fragment kodu zwraca 1900-01-01, gdy pole DOB jest puste. Chciałem (i oczekiwałem), że zwróci pusty ciąg (''), ale tak nie jest. Jak powinienem uzyskać pożądane wyniki?
isnull(convert(date,DOB,1),'')
Odpowiedzi:
Nie możesz uzyskać pustego ciągu, ponieważ zwracasz DATE
typ wartości z ISNULL
.
Według MSDN ,ISNULL
Zwraca ten sam typ co wyrażenie_kontrolne. Jeśli dosłowny NULL jest podany jako wyrażenie_kontrolne, zwraca typ danych wartości zastępczej. Jeśli literał NULL jest podany jako check_expression i nie podano wartości zastępczej, zwraca int.
Jeśli sprawdzasz, czy wartość jest NULL
, czy nie , nie ma potrzeby konwertowania jej na datę, chyba że chcesz zwrócić wartość daty (której nie wydaje się).
Zamiast tego użyj:
SELECT ISNULL( DOB , '')
Który wróci
''
jeśli wartość wynosi NULL
.
NULL
Data jest NULL
(brak wartości). Z drugiej strony pusty ciąg znaków ocenia 0
, co w SQL Server jest domyślnie liczbą całkowitą reprezentującą liczbę dni od tego czasu 1900-01-01
.
Jeśli chcesz zwrócić wartość DOB, gdy jest ona wypełniona, i usuń wartość zerową, gdy nie ma zapełnionej DOB. Możesz spróbować, ale DOB będzie varchar, a nie typem daty.
isnull(cast(cast(DOB as date)as varchar),'') as DOB (SQL SERVER)
VARCHAR
do DATE
ai powrót do a VARCHAR
nie ma żadnego sensu. Kiedy usuniesz te bzdury, twoja odpowiedź będzie taka sama, jak odpowiedź zaakceptowana z mniejszą ilością informacji.
datetime
i potrzebowałem tylko daty w YYYY-MM-DD
. Więc rzucając, gdy date
upuszczam czas. Następnie rzutowanie varchar
pozwala na użycie isnull
funkcji. Więc nadal otrzymuję datę dla zapełnionych rekordów i usuwam wartości null. W przeciwnym razie dostawałem 1900-01-01 00:00:00.000
.
Po prostu utwórz widok
UTWÓRZ WIDOK test_view
JAK
WYBIERZ przypadek, gdy rok (DOB) <= 1900, a następnie zerowy, inaczej DOB kończy się jako DOB, czasami identyfikator z testu;
a następnie użyj jej zamiast oryginalnej tabeli: wybierz * z widoku_testu
posługiwać się
wybierz isnull (Konwertuj (Varchar (500), Data, 106), '')
to działa
NULL
datami, mówiSELECT CAST('' AS DATE)
. Jaki jest typ danychDOB
?