找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 30|回复: 0

oracle数据库,不同nls_date_format设置对regexp_substr的影响

[复制链接]
发表于 2025-10-5 15:21:53 | 显示全部楼层 |阅读模式
本帖最后由 likeyouli 于 2025-10-6 09:17 编辑

第一步:首先查询当前会话的nls_date_format的设置(当前会话是目前生效的设置,如外还有数据库实例设置nls_instance_parameters,数据库设置nls_database_parameters):
                         select * from nls_session_parameters  返回:DD-MON-RR  
     查询日期:     select fyfssj from YB_FYMX_WS where rownum < 50  返回:2023-1-1 星期日
此时:select regexp_substr(fyfssj,'[0-9]+',1,1) from YB_FYMX_WS where rownum < 50 返回:01
         select regexp_substr(fyfssj,'[0-9]+',1,2) from YB_FYMX_WS where rownum < 50 返回:1
         select regexp_substr(fyfssj,'[0-9]+',1,3) from YB_FYMX_WS where rownum < 50 返回23

第二步:更改日期nls_date_format的设置为:alter session set nls_date_format = 'yyyy-mm-dd'
查询日期:select fyfssj from YB_FYMX_WS where rownum < 50  仍旧返回2023-1-1 星期日   ,貌似与上边没啥区别。
   此时:
        select regexp_substr(fyfssj,'[0-9]+',1,1) from YB_FYMX_WS where rownum < 50 返回:2023
        select regexp_substr(fyfssj,'[0-9]+',1,2) from YB_FYMX_WS where rownum < 50 返回:01
       select regexp_substr(fyfssj,'[0-9]+',1,3) from YB_FYMX_WS where rownum < 50 返回:01

     通过上述设置验证,查询fyfssj同样显示为 2023-1-1 星期日   , 但由于是不同的nls_date_format 设置,会截取到(regexp_substr)不同的结果,在做日期方面的有关查询时要格外注意。

        补充一下:上边的日期设置,dd会将个位数的日前边补0显示,mm会将个位数的月前边补0,如果日和月前边都不想补0,可以设置为alter session set nls_date_format = 'fmdd-MON-yyyy' 或者alter session set nls_date_format = 'yyyy-MON-fmdd'  ,此时无论月份还是日为个位数时前边也不会补零0 。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1|闽公网安备35020302032614号 )

GMT+8, 2026-8-4 19:12

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表