Oracle 如何获得一周的第一天,取决于NLS
我想获得一周中第一天的日期,但我希望它取决于NLS参数。比如说,当我在美国运行它时,它应该给我星期天的日期,但在土耳其它应该给我星期一Oracle 如何获得一周的第一天,取决于NLS,oracle,nls,Oracle,Nls,我想获得一周中第一天的日期,但我希望它取决于NLS参数。比如说,当我在美国运行它时,它应该给我星期天的日期,但在土耳其它应该给我星期一 select trunc(to_date(sysdate,'dd-mm-yy'),'iw')from dual; 如何使其独立?,trunc(sysdate,'IW')为您提供: 一周中的同一天为ISO 8601标准定义的日历周的第一天,即星期一 正如您所看到的,这显然不依赖NLS 您可能会认为使用W会提供非ISO、NLS依赖的版本,但它会做一些不同的事情—一
select trunc(to_date(sysdate,'dd-mm-yy'),'iw')from dual;
如何使其独立?,trunc(sysdate,'IW')
为您提供:
一周中的同一天为ISO 8601标准定义的日历周的第一天,即星期一
正如您所看到的,这显然不依赖NLS
您可能会认为使用W
会提供非ISO、NLS依赖的版本,但它会做一些不同的事情—一周中的同一天是一个月的第一天。所以现在就跑吧,不管你的设置如何,这都会给你带来周一,因为7月1日是周一
因此,您需要D
、DY
或DAY
-它们的行为都相同:
alter session set nls_territory = 'AMERICA';
select trunc(sysdate, 'D') from dual;
TRUNC(SYS
---------
14-JUL-13
alter session set nls_territory = 'TURKEY';
select trunc(sysdate, 'D') from dual;
TRUNC(SYSD
----------
15/07/2013
顺便提一下,您的原始查询正在执行
到_date(sysdate,'dd-mm-yy')
<代码>系统日期已经是日期。您正在强制将该日期转换为字符串,该字符串将使用NLS_date_格式
,然后使用dd-mm-yy
显式转换回日期。这不仅毫无意义,而且如果您的NLS_DATE_格式
与您明确使用的dd-mm-yy
不匹配(大致上,有相当大的回旋余地),它将崩溃:
alter session set nls_date_format = 'dd/mm/yyyy';
select to_date(sysdate,'dd-mm-yy') from dual;
TO_DATE(SY
----------
18/07/2013
alter session set nls_date_format = 'dd-mon-rr';
select to_date(sysdate,'dd-mm-yy') from dual;
TO_DATE(S
---------
18-jul-13
alter session set nls_date_format = 'mm/dd/yyyy';
select to_date(sysdate,'dd-mm-yy') from dual;
select to_date(sysdate,'dd-mm-yy') from dual
*
ERROR at line 1:
ORA-01843: not a valid month
alter session set nls_date_format = 'yyyy-mm-dd';
select to_date(sysdate,'dd-mm-yy') from dual;
select to_date(sysdate,'dd-mm-yy') from dual
*
ERROR at line 1:
ORA-01861: literal does not match format string
。。。等等。默认情况下,您的
NLS\u日期\u格式继承自NLS\u TERRITORY
,因此,如果您希望处理多个地区,这可能是一个问题。当您使用iso week时,所有地区的格式都是相同的。它总是在星期一回来
不要用这个,
select sysdate your_date,
trunc(sysdate,'IW') iso_start_of_week,
to_char(sysdate,'D') your_territory_day,
trunc(sysdate)- to_char(sysdate,'D') + 1 this_is_what_u_want
from dual
指向文档的链接已失效。@RisingDarkess-Oracle文档链接经常出现这种情况,这很有帮助。。。修好了,谢谢。