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

Oracle PL/SQL将Mon yyyy格式日期转换为dd-mm-yy格式的方法

解决PL/SQL日期格式转换问题

你当前代码里的TO_DATE(IN_MONTH , 'DD-MM-YYYY')格式掩码完全不匹配输入的August 2022,会直接报错。正确处理分两步:先将输入字符串解析为DATE类型,再转换为目标格式。

具体实现步骤

  • 解析输入字符串
    输入格式是「英文月份全称+4位年份」,对应Oracle的日期格式掩码为'FMMonth YYYY':

    • Month:匹配英文月份全称(默认不区分大小写,除非NLS设置强制区分)
    • FM:去除Oracle默认给Month补的多余空格(比如August会被自动补到9字符长度,FM会剔除这些空格)
    • YYYY:匹配4位年份数字
  • 转换为目标格式
    目标格式01-08-22是「两位日-两位月-两位年」,用TO_CHAR函数搭配格式掩码'DD-MM-RR':

    • DD:自动取当月第一天(因为输入无日期信息)并格式化为两位数字
    • MM:将月份转换为两位数字
    • RR:将4位年份转为两位,自动识别世纪(22对应2022)

修改后的代码示例

PROCEDURE CHECK_DUMMY
(
        IN_SL_NO                         IN      SIGN.SL_NO%TYPE,
        IN_MONTH                    IN      SIGN.MONTH%TYPE
)
AS
        V_MON_DATE          DATE;
        V_TARGET_FORMAT     VARCHAR2(10);
BEGIN
        -- 解析"August 2022"为DATE类型
        V_MON_DATE := TO_DATE(IN_MONTH, 'FMMonth YYYY');
        
        -- 转换为"01-08-22"格式
        V_TARGET_FORMAT := TO_CHAR(V_MON_DATE, 'DD-MM-RR');
        
        -- 此处可添加后续业务逻辑
        DBMS_OUTPUT.PUT_LINE('转换后日期:' || V_TARGET_FORMAT);
END CHECK_DUMMY;

额外注意

如果数据库的NLS_DATE_LANGUAGE不是英文,需要在解析时指定语言,避免月份识别失败:

V_MON_DATE := TO_DATE(IN_MONTH, 'FMMonth YYYY', 'NLS_DATE_LANGUAGE = AMERICAN');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 01:35:27