R语言中如何将test表的Time列转换为小时区间列?
实现Time列转小时区间的方法
针对你的需求,我们可以通过提取Time字段的小时部分,再拼接成指定的区间格式。以下是主流数据库的具体实现方式:
MySQL/MariaDB
使用HOUR()函数提取小时,再通过字符串拼接生成区间:
-- 新增列并更新数据 ALTER TABLE test ADD COLUMN hour_interval VARCHAR(10); UPDATE test SET hour_interval = CONCAT(HOUR(Time), ' - ', HOUR(Time) + 1); -- 仅查询生成结果(不修改原表) SELECT Time, CONCAT(HOUR(Time), ' - ', HOUR(Time) + 1) AS hour_interval FROM test;
PostgreSQL
用EXTRACT(HOUR FROM "Time")获取小时,转换为整数后拼接:
-- 新增列并更新数据 ALTER TABLE test ADD COLUMN hour_interval VARCHAR(10); UPDATE test SET hour_interval = CONCAT(EXTRACT(HOUR FROM "Time")::INT, ' - ', EXTRACT(HOUR FROM "Time")::INT + 1); -- 仅查询生成结果(不修改原表) SELECT "Time", CONCAT(EXTRACT(HOUR FROM "Time")::INT, ' - ', EXTRACT(HOUR FROM "Time")::INT + 1) AS hour_interval FROM test;
SQL Server
使用DATEPART(HOUR, Time)提取小时并拼接:
-- 新增列并更新数据 ALTER TABLE test ADD hour_interval VARCHAR(10); UPDATE test SET hour_interval = CONCAT(DATEPART(HOUR, Time), ' - ', DATEPART(HOUR, Time) + 1); -- 仅查询生成结果(不修改原表) SELECT Time, CONCAT(DATEPART(HOUR, Time), ' - ', DATEPART(HOUR, Time) + 1) AS hour_interval FROM test;
额外说明
- 如果Time字段是字符串类型(而非原生时间类型),需要先转换为时间格式再提取小时:
- MySQL:
HOUR(STR_TO_TIME(Time, '%H:%i:%s')) - PostgreSQL:
EXTRACT(HOUR FROM TO_TIMESTAMP(Time, 'HH24:MI:SS')) - SQL Server:
DATEPART(HOUR, CAST(Time AS TIME))
- MySQL:
- 23点的场景会自动生成
23 - 24的区间,符合需求逻辑。
内容的提问来源于stack exchange,提问作者Tinus Brand
相关产品推荐
相关产品推荐

