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),'')
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),'')
Respostas:
Você não pode obter uma sequência vazia porque está retornando o DATE
tipo de valor ISNULL
.
Por MSDN ,ISNULL
Retorna o mesmo tipo que check_expression. Se um NULL literal for fornecido como verificação_expressão, retornará o tipo de dados do valor_de substituição. Se um NULL literal for fornecido como verificação_expressão e nenhum valor_de substituição for fornecido, retornará um int.
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:
SELECT ISNULL( DOB , '')
Que retornará
''
se o valor for NULL
.
Uma NULL
data é NULL
(sem valor). Uma string vazia, por outro lado, avalia como 0
, que no SQL Server é implicitamente um número inteiro que representa o número de dias desde então 1900-01-01
.
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.
isnull(cast(cast(DOB as date)as varchar),'') as DOB (SQL SERVER)
VARCHAR
para um DATE
e voltar para um VARCHAR
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 dela YYYY-MM-DD
. Então, lançando como date
eu largar o tempo. Em seguida, lançar o varchar
permite o uso da isnull
função. Portanto, ainda recebo uma data para os registros preenchidos e removo os valores nulos. Caso contrário, eu estava recebendo 1900-01-01 00:00:00.000
.
usar
selecionar isnull (Converter (Varchar (500), Data, 106), '')
está funcionando
NULL
datas está dizendoSELECT CAST('' AS DATE)
. Que tipo de dados éDOB
?