sql - 如何从 SQL SERVER 中的日期时间戳的时间部分创建一天的四分之一
问题描述
我有一个数据集,其中包含一个变量 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:00 到 05: 59:59,第 2 季度从 06:00:00 开始,在 11:59:59 结束,第 3 季度从 12:00:00 开始,在 17:59:59 结束,第 4 季度从 18:00:00 到 11 点开始: 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;
但不知道如何进入宿舍。有人可以帮忙吗?
解决方案
请注意以下是针对 MySQL 的(不正确的问题标签)- SQL Server 解决方案在此答案的下方
您可以通过获取 theHOUR
的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
6 start_time
,加 1 (所以你不会得到Q0
)并用于FLOOR
将其降低到最接近的整数。
编辑在讨论 RDBMS 标签不正确之后
在意识到您实际上是在使用 SQL Server 而不是 MySQL 之后,找到以下将在 SQL 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 Q3
推荐阅读
- botframework - 如何为“botframwork-webchat”中的每条传入消息添加侦听器
- gcc - 如何修复此错误 /usr/bin/ld: cannot find crtbeginS.o:
- shopify - 如何在 Shopify 网站的每个浏览器中自动播放视频
- storybook - 在 Storybook 中隐藏文档选项卡
- python - scikit-learn 中纵向/面板数据的交叉验证
- javascript - Ajax 执行后的值按钮
- jquery - 如何使用一个语句从数据库中选择 3 个不同的日期时间?
- amazon-web-services - 如何在实例中获取 AWS OpsWorks 实例 ID?
- elasticsearch - 将索引的“关键字”更新为“文本”字段类型,以便在弹性搜索中匹配不精确的单词
- cookies - 商店软件 cookie 管理器未删除 Google IDE cookie