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

SQL查询如何格式化起止日期为日+3位月份并逗号拼接输出

SQL实现指定格式日期段拼接方案

核心思路

你之前的写法仅截取了开始日期的3位月份缩写,缺失了日字段提取、前后段拼接、分隔符添加、结束日期处理几个环节,要得到目标格式需要按以下步骤处理:

  1. 分别对start_date、end_date两个字段做格式化,提取带前导零的两位日期+3位英文月份缩写,两部分用空格连接
  2. 两个日期的格式化结果用, (逗号+空格)做分隔拼接,最终别名设为time_period

不同数据库的实现代码

MySQL / MariaDB

直接用内置DATE_FORMAT函数即可,%d对应两位带前导零的日期,%b对应3位英文月份缩写,无需额外截取处理:

SELECT
  CONCAT(
    DATE_FORMAT(start_date, '%d %b'),
    ', ',
    DATE_FORMAT(end_date, '%d %b')
  ) AS time_period
FROM 你的表名;

针对你给出的样例数据,该语句返回结果完全匹配预期:

  • 输入start_date=2012-03-10 05:57:39.629597、end_date=2022-06-03 05:57:39.629597,输出10 Mar, 03 Jun
  • 输入start_date=2010-04-06 05:57:39.629597、end_date=2022-05-20 05:57:39.629597,输出06 Apr, 20 May

PostgreSQL

使用TO_CHAR函数做日期格式化:

SELECT
  CONCAT(
    TO_CHAR(start_date, 'DD Mon'),
    ', ',
    TO_CHAR(end_date, 'DD Mon')
  ) AS time_period
FROM 你的表名;

SQL Server

使用FORMAT函数时注意指定英文区域,避免返回本地语言的月份缩写:

SELECT
  CONCAT(
    FORMAT(start_date, 'dd MMM', 'en-US'),
    ', ',
    FORMAT(end_date, 'dd MMM', 'en-US')
  ) AS time_period
FROM 你的表名;

原写法问题说明

你之前使用的SUBSTRING( MONTHNAME(start_date), 1, 3)逻辑仅完成了「提取开始日期3位月份缩写」这一个步骤,既没有提取日字段、处理日期前导零,也没有添加分隔符、拼接结束日期的对应内容,因此无法得到目标格式结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 22:18:23