如何在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
相关产品推荐
相关产品推荐

