日期和当前日期之间的差异,if语句?

问题描述 投票:-4回答:3

我有一个有四列的表:

  • ID;
  • datefrom;
  • dateto;
  • 用户身份。

我需要以小时为单位计算datefrom和dateto(datefrom-dateto)之间的差异,将此差异添加到其他列中。主要的是日期的一些单元格是空的。在这种情况下,我应该将“dateto”作为当前日期和时间。

第二件事是使用if statment添加列。如果datefrom和date之间的差异超过3小时,则为0,否则为0。

现在我只能计算小时差异。当小时数超过3时,主要问题是空单元格和附加列声明

select id, DateFrom, DateTo, UserId,
(Datefrom-DateTO) as hours
 from table

order by id

enter image description here

sql
3个回答
0
投票

这是MS SQL的一个很好的例子:

DECLARE @StartDate DATETIME
DECLARE @EndDate DATETIME
SET @StartDate ='2007-06-05'
SET @EndDate ='2007-08-05'

SELECT DATEDIFF(Hour, @StartDate, @EndDate) AS NewDate
--Return Value = 1464 Hour


SELECT DATEDIFF(minute, @StartDate, @EndDate) AS NewDate
--Return Value = 87840 minute


SELECT DATEDIFF(second, @StartDate, @EndDate) AS NewDate
--Return Value = 5270400 second

0
投票

你需要一些控制Flow Functions。 选择后,您将需要:

SELECT id, datefrom, dateto, userid

你可以使用IFNULL(),如果dateto是NULL,那么它将返回CURDATE()

IFNULL(dateto, CURDATE())

还有一个IF(condition, truth, false),但首先,你需要几个小时的差异。您可以使用一些Date and Time Functions计算,您将获得日期之间的差异,将其转换为秒,并除以3600):

TIME_TO_SEC(TIMEDIFF(IFNULL(dateto, CURDATE()), datefrom)) / 3600

现在,检查它是否大于3:

IF(TIME_TO_SEC(TIMEDIFF(IFNULL(dateto, CURDATE()), datefrom)) / 3600 > 3, 1, 0)

最后,它会像:

SELECT
  id,
  datefrom,
  dateto,
  userid,
  TIME_TO_SEC(TIMEDIFF(IFNULL(dateto, CURDATE()), datefrom)) / 3600
  IF(TIME_TO_SEC(TIMEDIFF(IFNULL(dateto, CURDATE()), datefrom)) / 3600 > 3, 1, 0),
FROM table;

0
投票

谢谢大家。

我在Periscope中编写了代码。我不知道为什么,但我可以使用一些函数作为TIME_TO_SEC,TIMEDIFF,TIMESTAMPDIFF。

最终代码如下。

SELECT id
, DateFrom
, DateTo
, UserId
, CASE 
 WHEN DateFrom is null OR (DateFrom - DateTo) < '0 days 00:00:00'
 THEN (NOW() - DateTo)
 ELSE (DateFrom - DateTo)   
 END as hours 
, CASE 
 WHEN (DateFrom IS NULL AND (NOW() - DateTo) > '0 days 03:00:00') OR (DateFrom is not null and ((DateFrom - DateTo) > '0 days 03:00:00') OR (DateFrom - DateTo) < '0 days 00:00:00')
 THEN 1
 ELSE 0 
 END as Attribute
© www.soinside.com 2019 - 2024. All rights reserved.