我有一个数据集,它包含一个变量start_time,它是一个DateTimeStamp变量,包含以下值:
Start_Time
2019-06-19 02:10:52.563
2019-07-24 02:00:05.037
2019-07-31 07:24:44.187
2019-08-11 16:52:24.343我想要做的是将每个时间戳转换为一天的四分之一(也就是说,一天中有4个季度由6小时组成,第一个季度从hh:mm:ss开始,从00:00到05:59:59;第2季度从06:00开始,结束时间是11:59:59;第三季度是从12:00结束,17:59:59;第四季度是从18: 00:00 :00 :11:59:59:59开始)。因此,结果将是:
Start_Time Quarter
2019-06-19 02:10:52.563 Q1
2019-07-24 02:00:05.037 Q1
2019-07-31 07:24:44.187 Q2
2019-08-11 16:52:24.343 Q3
..... and so forth我能够从上述数据中提取时间部分:
SELECT convert(char(8), start_time, 108) [time] from MyTable;但不知道怎么进宿舍。有人能帮忙吗?
发布于 2019-10-18 09:25:52
注意:下面是MySQL (不正确的问题标记)的说明-- Server解决方案将进一步深入这个答案
您可以通过获取HOUR的start_time,然后使用CASE语句来实现这一点:
SELECT start_time,
CASE
WHEN start_hour < 6 THEN 'Q1'
WHEN start_hour < 12 THEN 'Q2'
WHEN start_hour < 18 THEN 'Q3'
ELSE 'Q4'
END AS `time`
FROM (
SELECT start_time,
HOUR(start_time) AS start_hour
FROM MyTable
) a产出:
start_time time
2019-06-19T02:10:53Z Q1
2019-07-24T02:00:05Z Q1
2019-07-31T07:24:44Z Q2
2019-08-11T16:52:24Z Q3或者,您可以使用简单的数学来实现相同的目标:
SELECT start_time,
CONCAT('Q', FLOOR(HOUR(start_time) / 6 + 1)) AS `time`
FROM MyTable这只是将HOUR的start_time除以6,添加1(所以您没有得到Q0),并使用FLOOR将其降到最接近的整数。
MySQL琴
关于关系数据库标签错误的讨论后的编辑
在意识到您实际上使用的是Server而不是MySQL之后,可以在Server中找到以下实现相同功能的方法:
SELECT start_time,
CONCAT('Q', FLOOR(DATEPART(HOUR, start_time) / 6 + 1)) AS [time]
FROM MyTable输出:
start_time time
2019-06-19T02:10:53Z Q1
2019-07-24T02:00:05Z Q1
2019-07-31T07:24:44Z Q2
2019-08-11T16:52:24Z Q3SQL Server sqlfiddle
发布于 2019-10-18 09:28:29
你可以用它得到一个1和4之间的数字:
(extract(Hour from start_time) / 6) + 1编辑:
提取时间对于Server是不同的
datepart(hour, Start_Time)/6+1发布于 2019-10-18 09:38:08
我能够获得我希望从Server 12输出的方式:
-- Converting the date into quarters
select a.*,
CASE
WHEN a.STime BETWEEN '00:00:00' AND '05:59:59' THEN 'Q1'
WHEN a.STime BETWEEN '06:00:00' AND '11:59:59' THEN 'Q2'
WHEN a.STime BETWEEN '12:00:00' AND '17:59:59' THEN 'Q3'
ELSE 'Q4'
END AS QuarterOfTheDay
FROM (SELECT convert(char(8), start_time, 108) as STime from MyTable) a;当HOUR()作为错误返回时,我无法使用其他两个答案:
Msg 195, Level 15, State 10, Line 36
'HOUR' is not a recognized built-in function name.https://stackoverflow.com/questions/58447749
复制相似问题