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 DATEtyp 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.
NULLData 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)
VARCHARdo DATEai powrót do a VARCHARnie ma żadnego sensu. Kiedy usuniesz te bzdury, twoja odpowiedź będzie taka sama, jak odpowiedź zaakceptowana z mniejszą ilością informacji.
datetimei potrzebowałem tylko daty w YYYY-MM-DD. Więc rzucając, gdy dateupuszczam czas. Następnie rzutowanie varcharpozwala na użycie isnullfunkcji. 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
NULLdatami, mówiSELECT CAST('' AS DATE). Jaki jest typ danychDOB?