我有以下代码,以分钟为单位计算两个时间点-“ CompleteDataTime”和“ RequestedDateTime”之间的时间。
Select [Financial Number],
datediff(mi,CompletedDateTime1, RequestedDateTime2) as Prov_to_dispo1
FROM NewTable
order by [Financial Number]
在某些记录中,“ CompleteDataTime”变量为空白或丢失;因此,代码在计算Prov_to_dispo1时会为这些记录生成一个“空”值。
我的数据集“出发日期和时间”中还有另一个变量,当缺少“ CompleteDataTime”时,我想将其用作“ CompleteDataTime”的代理-这可能吗?
我假设我需要一个看起来像IF-THEN的语句
IF 'CompleteDataTime' = . THEN Prov_to_dispo1 = datediff(mi,'Depart Date &
Time', RequestedDateTime2) as Prov_to_dispo1
所需的输出应类似于
FIN Prov_to_dispo1
1 345
2 685
3 148
4 306
5 265
答案 0 :(得分:1)
这应该做到。
Select [Financial Number],
case when isnull(CompletedDateTime1, '') = '' then
datediff(mi,DepartDateTime, RequestedDateTime2)
else
datediff(mi,CompletedDateTime1, RequestedDateTime2)
end as Prov_to_dispo1
FROM NewTable
order by [Financial Number]
答案 1 :(得分:1)
您可以使用ISDATE()
功能。根据官方文档:
如果表达式是有效的日期,时间或日期时间值,则返回1;否则,返回1。否则为0
如果您使用的是SQL Server 2012或更高版本,我建议您使用IIF()
函数而不是CASE-WHEN
语句。如果您不知道IIF()
函数的工作方式,那么IIF()
函数的语法如下:
IIF ( boolean_expression, true_value, false_value )
因此,代码如下:
SELECT
[Financial Number],
DATEDIFF(
mi,
IIF(
ISDATE(CompletedDateTime1) = 1, --boolean_expression
CompletedDateTime1, -- true_value
'Depart Date & Time' -- false_value
),
RequestedDateTime2
) as Prov_to_dispo1
FROM NewTable
ORDER BY [Financial Number]
希望这会有所帮助。谢谢!