SQL中如何将日期列转换为当年首日带时间的datetime格式?
如何在SQL SELECT查询中将日期转换为当年第一天的带时间格式?
当然可以实现,核心思路是先提取目标日期的年份,构造出当年的第一天日期,再格式化为包含T和00:00:00时间部分的字符串。以下是主流数据库的具体实现方式:
MySQL
可以直接拼接年份与固定的日期时间字符串,或者用日期函数确保类型安全:
-- 简单拼接方式 SELECT CONCAT(YEAR(date_column), '-01-01T00:00:00') AS year_start FROM your_table; -- 日期函数转换(更规范) SELECT DATE_FORMAT(STR_TO_DATE(CONCAT(YEAR(date_column), '-01-01'), '%Y-%m-%d'), '%Y-%m-%dT%H:%i:%s') AS year_start FROM your_table;
PostgreSQL
使用DATE_TRUNC将日期截断到年份维度,再用TO_CHAR格式化目标字符串:
SELECT TO_CHAR(DATE_TRUNC('year', date_column), 'YYYY-MM-DD"T"HH24:MI:SS') AS year_start FROM your_table;
SQL Server
两种常用方式:用DATEFROMPARTS构造当年第一天后格式化,或者用DATEADD+DATEDIFF配合CONVERT生成ISO8601格式字符串:
-- 方式1:DATEFROMPARTS + FORMAT SELECT FORMAT(DATEFROMPARTS(YEAR(date_column), 1, 1), 'yyyy-MM-ddTHH:mm:ss') AS year_start FROM your_table; -- 方式2:DATEADD + DATEDIFF + CONVERT(性能更优) SELECT CONVERT(VARCHAR(19), DATEADD(YEAR, DATEDIFF(YEAR, 0, date_column), 0), 126) AS year_start FROM your_table;
Oracle
通过TRUNC截断日期到年份,再用TO_CHAR指定输出格式:
SELECT TO_CHAR(TRUNC(date_column, 'YYYY'), 'YYYY-MM-DD"T"HH24:MI:SS') AS year_start FROM your_table;
内容的提问来源于stack exchange,提问作者potatooowedges
相关产品推荐
相关产品推荐

