在我的SQL数据库中,我用时间戳存储日期,例如这样(2015-09-21 18:02:14)我要求使用SQL语句获取最后一次时间(18:02:15)是白天还是晚上
如果你有其他想法,请与我分享。如果它符合我的要求,我愿意使用它。
在我的表中,如果有20条记录的日期相同,那么只得到一天的记录如何创建类似的查询
如果一天的定义是从早上6点到下午6点,则
SELECT column
FROM `tablename`
WHERE HOUR( column )
BETWEEN 6
AND 18;
首先,您应该定义什么是白天和夜晚。然后可以使用DATE_FORMAT函数将日期时间字段转换为HH:MI
字符串。
例如,您可以选择18:00至8:00(夜间)的记录
select * from t
WHERE DATE_FORMAT(dt, '%H:%i')>='18:00'
or DATE_FORMAT(dt, '%H:%i')<'09:00'
SQLFiddle演示
您应该有另一个表(或其他数据源)来提供日落和日出时间,然后将您自己的日期时间与该源进行比较。您可以在添加到表之前进行比较(并创建另一个名为isDay的列),也可以在从表中选择时进行比较。
注:
-
日落/日出时间取决于您的地理位置。
-
有API可以提供这种信息
- 有一些算法可以帮助计算这些信息
示例:
- http://sunrise-sunset.org/api
- http://api.sunrise-sunset.org/json?lat=36.7201600&lng=-4.4203400&日期=2015-12-13
- 我需要日出/日落Web服务api
-- from sql server 2008 until now
SELECT
CASE WHEN DATEPART(HOUR, GETDATE()) < 18 THEN 'DAY'
ELSE 'NIGHT'
END
-- from sql server 2012 until now, if you don't like CASE
SELECT IIF(DATEPART(HOUR, GETDATE()) < 18, 'DAY', 'NIGHT')
18=下午6点可以将GETDATE()替换为DATETIME列
SELECT
CASE WHEN DATEPART(HOUR, 'yourDateTimeColumn') < 18 THEN 'DAY'
ELSE 'NIGHT'
END AS PeriodOfDay
FROM 'yourTable'