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

如何将单个日期时间列拆分为日、月、年三个独立列

实现方法

你的joining_date是DD-MON-YY带时间后缀的格式,别直接硬切字符串,容错率太低,用数据库自带的日期函数提取最稳,不同数据库写法如下,对着自己用的库抄就行:

  • Oracle(和你示例的日期格式默认适配度最高)
    如果字段本身是DATE类型,直接取就行:
SELECT
  TO_CHAR(joining_date, 'DD') AS joining_date,
  TO_CHAR(joining_date, 'MON') AS joining_month,
  TO_CHAR(joining_date, 'YY') AS joining_year
FROM 你的表名;

如果字段存的是字符串类型,先转成日期再取,避免格式解析错误:

SELECT
  TO_CHAR(TO_DATE(joining_date, 'DD-MON-YY HH.MI.SSAM'), 'DD') AS joining_date,
  TO_CHAR(TO_DATE(joining_date, 'DD-MON-YY HH.MI.SSAM'), 'MON') AS joining_month,
  TO_CHAR(TO_DATE(joining_date, 'DD-MON-YY HH.MI.SSAM'), 'YY') AS joining_year
FROM 你的表名;

跑出来的结果和你要的效果完全一致:日返回两位数字、月份返回三位大写英文缩写、年份返回两位短年份。

  • MySQL
    字段为DATETIME类型时写法:
SELECT
  DATE_FORMAT(joining_date, '%d') AS joining_date,
  UPPER(DATE_FORMAT(joining_date, '%b')) AS joining_month,
  DATE_FORMAT(joining_date, '%y') AS joining_year
FROM 你的表名;

如果是字符串存储,套一层STR_TO_DATE(joining_date, '%d-%b-%y %h.%i.%s%p')转成时间类型再提取即可。

  • PostgreSQL
SELECT
  TO_CHAR(joining_date::timestamp, 'DD') AS joining_date,
  TO_CHAR(joining_date::timestamp, 'MON') AS joining_month,
  TO_CHAR(joining_date::timestamp, 'YY') AS joining_year
FROM 你的表名;

踩坑提醒:别用字符串截取位置的方式拆分,碰到单数字日期/月份长度变化的场景(比如1月3号存成3-JAN-22而不是03-JAN-22),截取结果会直接错位,用官方日期格式化函数不存在这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 12:15:30