Eu tenho uma subconsulta que obtém o DATEDIFF
de duas datas. No entanto, o primeiro case
sempre retorna null
, mas a subconsulta real retorna datas?!
CASE
WHEN [date1] > [date2]
THEN DATEDIFF(DD,getdate(),date1)
WHEN date1 < date2
THEN DATEDIFF(DD,getdate(),date2)
END[date diff]
FROM(
SELECT
licext.new_licenceId,
CASE
WHEN CONVERT(time,licext.new_EmergencyLicenceExpiryDate) like '%23:00:00.000%'
THEN DATEADD(dd,1,CONVERT(date,licext.new_EmergencyLicenceExpiryDate))
ELSE CONVERT(date,licext.new_EmergencyLicenceExpiryDate)
END [date1], --EM Code
CASE
WHEN CONVERT(time,licext.new_standardLicenceExpiryDate) like '%23:00:00.000%'
THEN DATEADD(dd,1,CONVERT(date,licext.new_standardLicenceExpiryDate))
ELSE CONVERT(date,licext.new_standardLicenceExpiryDate)
END [date2] --FRL
from new_licenceExtensionBase licext
)QUERY
A razão pela qual os segundos casos estão lá é porque o banco de dados com o qual estou trabalhando com as lojas datetime
é muito estranho, ou seja) Se tiver 23:00 no final, na verdade significa a data de amanhã ?! (Este é um banco de dados do Microsoft CRM) -Mas isso é um assunto totalmente diferente.
EDITAR:
Ele tinha uma cláusula ELSE que funcionou bem para data2 sendo maior que data1, porque estava sendo avaliada. Por exemplo, o código a seguir funciona bem para obter a diferença entre hoje e data2:
CASE
WHEN [date1] > [date2]
THEN DATEDIFF(DD,getdate(),date1)
ELSE DATEDIFF(DD,getdate(),date2)
END[date diff]
EDIÇÃO 2:
Acabei de fazer alguns testes: Usar um select para retornar as datas funciona bem. -Eles retornam como esperado.
Teste 2: adicionei um terceiro WHEN
à consulta para dizer que, quando uma data for nula, retorne 1990-01-01 null
.
Não há nenhum
ELSE
em seu primeiroCASE
, o que significa que, se nenhuma de suasWHEN
expressões for correspondida, ele retornaráNULL
.Meu palpite é que há um problema em sua lógica abaixo que causa
date1
edate2
sempre é igual, o que perderia seusWHEN
s no primeiroCASE
e no retornoNULL
.