如何使用非标准的第一天计算Oracle中的一年中的一周?

时间:2010-11-05 23:26:00

标签: oracle datetime

我的查询需要返回日期字段的“一年中的一周”,但查询的客户使用的是一周中非标准的第一天,因此TO_CHAR'IW'不同没有返回预期的结果。在这种情况下,一周的第一天是星期六,星期五是一周的第七天。

使用T-SQL,我会使用DATEPARTSET DATEFIRST

什么是Oracle等价物?我在谷歌找到的所有关于设置NLS_TERRITORY的问题的Oracle答案ALTER SESSION SET NLS_TERRITORY = 'UNITED KINGDOM';但是我没有看到我可以选择任意一天的地方(除了找到使用星期六的领域之外) )。

2 个答案:

答案 0 :(得分:4)

IW适用于周一至周日的周,所以这应该可以满足您的需求。基本上,从现在开始的2天后得到一周:

to_char(your_date + 2, 'IW')

答案 1 :(得分:1)

Oracle的默认周格式计算从一年的第一天开始的周数,而不是一周的第一天。

因此,如果一年开始于2009年1月1日,第一天是星期三,则第1周将是2009年1月1日至2009年1月8日(周三至周二)。

如果您需要从周日到周六开始的周范围,您可以使用“iw”格式(并进行一些调整)。 http://download-uk.oracle.com/docs/cd/B14117_01/server.101/b10749/ch9sql.htm#CIHGFJEI

请尝试以下代码。我基本上使用“IW”格式并添加一个条件来获取从给定日期开始的周数..说... 01-jul-2008。

select target_date, 
        to_char(target_date+1,'iw') week_sun_thru_saturday,
        to_number(to_char(target_date+1,'iw')) -
        to_number(to_char( to_date('10-jul-2008','dd-mon-yyyy')+1,'iw')) week_from_01_jul_2008
from t;

请记住..这段代码不会给jul1st到jul-07的第1周。当然,01-jul-2008是星期天;)