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),'')
sql-server
sql-server-2012
datetime
Juan Velez
źródło
źródło
NULL
datami, mówiSELECT CAST('' AS DATE)
. Jaki jest typ danychDOB
?Odpowiedzi:
Nie możesz uzyskać pustego ciągu, ponieważ zwracasz
DATE
typ wartości zISNULL
.Według MSDN ,
ISNULL
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:
Który wróci
jeśli wartość wynosi
NULL
.NULL
Data jestNULL
(brak wartości). Z drugiej strony pusty ciąg znaków ocenia0
, co w SQL Server jest domyślnie liczbą całkowitą reprezentującą liczbę dni od tego czasu1900-01-01
.źródło
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.
źródło
VARCHAR
doDATE
ai powrót do aVARCHAR
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 wYYYY-MM-DD
. Więc rzucając, gdydate
upuszczam czas. Następnie rzutowanievarchar
pozwala na użycieisnull
funkcji. Więc nadal otrzymuję datę dla zapełnionych rekordów i usuwam wartości null. W przeciwnym razie dostawałem1900-01-01 00:00:00.000
.Spowoduje to konwersję daty NULL na spację. Warstwa aplikacji (Excel) dobrze obsługuje przestrzeń
źródło
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
źródło
posługiwać się
wybierz isnull (Konwertuj (Varchar (500), Data, 106), '')
to działa
źródło