获得一周的一天

你可以使用 TO_CHAR( date_value, 'D' ) 来获取星期几。

但是,这取决于 NLS_TERRITORY 会话参数:

ALTER SESSION SET NLS_TERRITORY = 'AMERICA';        -- First day of week is Sunday
SELECT TO_CHAR( DATE '1970-01-01', 'D' ) FROM DUAL;

输出 5

ALTER SESSION SET NLS_TERRITORY = 'UNITED KINGDOM'; -- First day of week is Monday
SELECT TO_CHAR( DATE '1970-01-01', 'D' ) FROM DUAL;

输出 4

要独立于 NLS 设置执行此操作,你可以将日期截断到当天的午夜(以删除任何天数),并将截断的日期减去当前 iso 周的开始(始终在星期一开始):

SELECT TRUNC( date_value ) - TRUNC( date_value, 'IW' ) + 1 FROM DUAL