在我的SQL数据库中,我存储带有时间戳的日期,例如像这样(2015-09-21 18:02:14)我要求上次使用SQL语句获取最后一次(18:02:14)是白天或晚上
如果您有其他想法,请与我分享。如果它符合我的要求,我想使用它。
在我的表中,如果有20个记录相同的日期,那么只获得白天记录如何创建像这样的查询
答案 0 :(得分:4)
如果当天定义从早上6点到下午6点,那么
SELECT column
FROM `tablename`
WHERE HOUR( column )
BETWEEN 6
AND 18;
答案 1 :(得分:1)
首先,您应该定义什么是白天和黑夜。然后,您可以使用DATE_FORMAT函数将datetime字段转换为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'
答案 2 :(得分:1)
您应该有另一个表(或其他数据源)提供日落和日出时间,然后将您自己的日期时间与该来源进行比较。您可以在添加到表之前(并创建另一个名为isDay的列)或从表中进行SELECTing时进行比较。
注意:
日落/日出时间取决于您的地理位置。
有API可以提供该信息
示例:
答案 3 :(得分:0)
-- 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 = 6PM 您可以用DATETIME列替换GETDATE()
SELECT
CASE WHEN DATEPART(HOUR, 'yourDateTimeColumn') < 18 THEN 'DAY'
ELSE 'NIGHT'
END AS PeriodOfDay
FROM 'yourTable'