Oracle中如何以周日为周起始日计算星期几?
解决Oracle中以周日为一周起始日的星期计算问题
方法1:通过NLS参数指定周起始规则
直接在TO_CHAR函数中指定NLS_TERRITORY参数,选择以周日为周起始的地区(如美国),无需修改会话全局设置:
SELECT TO_CHAR(TO_DATE('2022-09-12', 'YYYY-MM-DD'), 'D', 'NLS_TERRITORY=AMERICA') FROM DUAL;
执行后返回6,符合需求。该参数仅作用于当前TO_CHAR调用,临时生效。
如果需要全局生效,可修改会话参数:
ALTER SESSION SET NLS_TERRITORY = 'AMERICA';
之后执行SELECT TO_CHAR(SYSDATE, 'D') FROM DUAL;,将默认以周日为周起始日返回结果。
方法2:使用数学计算转换结果
利用MOD函数做数值转换,完全避免CASE语句:
SELECT MOD(TO_NUMBER(TO_CHAR(TO_DATE('2022-09-12', 'YYYY-MM-DD'), 'D')), 7) + 1 FROM DUAL;
逻辑说明:
- Oracle默认
'D'返回值规则:周一=1、周二=2、…、周六=6、周日=7 - 通过
MOD(值,7)将周日的7转为0,其余日期的返回值保持不变 - 最后加1,得到目标规则:周日=1、周一=2、…、周五=6、周六=7
内容的提问来源于stack exchange,提问作者deepankar srigyan
相关产品推荐
相关产品推荐

