O seguinte trecho de código está retornando 1900-01-01 quando o campo DOB é nulo. Eu queria (e esperava) retornar uma string vazia (''), mas não é. Como devo proceder para obter os resultados desejados?
isnull(convert(date,DOB,1),'')
sql-server
sql-server-2012
datetime
Juan Velez
fonte
fonte
NULL
datas está dizendoSELECT CAST('' AS DATE)
. Que tipo de dados éDOB
?Respostas:
Você não pode obter uma sequência vazia porque está retornando o
DATE
tipo de valorISNULL
.Por MSDN ,
ISNULL
Se você estiver verificando se o valor é ou não
NULL
, não há necessidade de convertê-lo em uma data, a menos que você deseje retornar um valor de data (o que não parece ser).Em vez disso, use:
Que retornará
se o valor for
NULL
.Uma
NULL
data éNULL
(sem valor). Uma string vazia, por outro lado, avalia como0
, que no SQL Server é implicitamente um número inteiro que representa o número de dias desde então1900-01-01
.fonte
Se você deseja retornar um valor para o DOB quando ele é preenchido e remover o valor nulo quando não houver nenhum DOB preenchido. Você pode tentar isso, mas o DOB será um varchar e não um tipo de data.
fonte
VARCHAR
para umDATE
e voltar para umVARCHAR
não faz sentido. Quando você remove esse absurdo, sua resposta é a mesma que a resposta aceita, com menos exposição.datetime
data e precisava apenas delaYYYY-MM-DD
. Então, lançando comodate
eu largar o tempo. Em seguida, lançar ovarchar
permite o uso daisnull
função. Portanto, ainda recebo uma data para os registros preenchidos e removo os valores nulos. Caso contrário, eu estava recebendo1900-01-01 00:00:00.000
.Isso converterá a data NULL em espaço. A camada de aplicação (Excel) lida com o espaço
fonte
Basta criar uma visualização
CREATE VIEW test_view
AS
SELECT caso quando ano (DOB) <= 1900 então null mais DOB termina como DOB, algum texto, id do teste;
e use-a em vez da tabela original: selecione * em test_view
fonte
usar
selecionar isnull (Converter (Varchar (500), Data, 106), '')
está funcionando
fonte