You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL查询中将month列转为MM格式并拼接year-month?

如何将SQL中的月份转为两位数字并拼接成年份-月份格式

你已经用CONCAT实现了基本的拼接,但要把月份转为两位数字(MM格式),需要用到各数据库对应的格式化或填充函数,下面是几种主流SQL数据库的解决方案:

MySQL/MariaDB

方案1:使用LPAD左填充函数

LPAD可以将字段填充到指定长度,不足的部分用指定字符(这里是0)补充:

SELECT CONCAT(year, '-', LPAD(month, 2, '0')) AS period FROM timetable;

方案2:使用日期格式化函数

如果year和month可以组成合法日期,也可以先转成日期再格式化:

SELECT DATE_FORMAT(STR_TO_DATE(CONCAT(year, month), '%Y%m'), '%Y-%m') AS period FROM timetable;

SQL Server

方案1:使用RIGHT拼接补0

通过给月份字符串前加0,再取右侧两位实现补0:

SELECT CONCAT(year, '-', RIGHT('0' + CAST(month AS VARCHAR(2)), 2)) AS period FROM timetable;

方案2:使用FORMAT函数(SQL Server 2012及以上版本)

FORMAT可以直接将数字格式化为指定的两位格式:

SELECT CONCAT(year, '-', FORMAT(month, '00')) AS period FROM timetable;

PostgreSQL

方案1:使用TO_CHAR格式化数字

TO_CHAR支持将数字转为指定格式,FM00表示去掉多余空格的两位数字:

SELECT CONCAT(year, '-', TO_CHAR(month, 'FM00')) AS period FROM timetable;

方案2:构造日期后格式化

通过MAKE_DATE构造日期,再格式化为YYYY-MM:

SELECT TO_CHAR(MAKE_DATE(year, month, 1), 'YYYY-MM') AS period FROM timetable;

Oracle

方案1:使用LPAD左填充

和MySQL的用法一致:

SELECT CONCAT(year, '-', LPAD(month, 2, '0')) AS period FROM timetable;

方案2:使用TO_CHAR格式化

SELECT CONCAT(year, '-', TO_CHAR(month, 'FM00')) AS period FROM timetable;

以上任意一种方案都能帮你得到想要的输出:

year-month
2017-04
2018-05
2017-10

内容的提问来源于stack exchange,提问作者rajini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:40:06