2013-07-18 7 views
2

주 첫날의 날짜를 가져오고 싶지만 NLS 매개 변수에 종속되기를 원합니다. 나는 미국에 그것을 실행할 때 말, NLS에 따라 1 주일을 시작하는 방법

select trunc(to_date(sysdate,'dd-mm-yy'),'iw')from dual; 

가 어떻게 그것을 따라 할 수 있습니다 .. 그것은 나에게 일요일 날짜를 제공해야하지만, 터키에서 나에게 월요일을 제공해야합니까?

답변

4

According to the documentation, trunc(sysdate, 'IW')은 ISO 주 첫날 인 월요일과 같은 요일을 제공합니다. 네가 보았 듯이, 그것은 분명 NLS에 의존하지 않는다.

W을 사용하면 비 ISO, NLS 종속 버전을 제공 할 수 있다고 생각할 수 있지만, 그 달의 첫 번째 날과 같은 요일이 아닌 다른 것이 있습니다. 지금 실행하면 7 월 1 일이 월요일 이었으므로 설정에 관계없이 월요일에 알려줍니다.

그래서 당신도 D, DY 또는 DAY 필요 - 모두가 동일하게 동작 thaey :

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 

이 덧붙여, 원래 쿼리가 to_date(sysdate,'dd-mm-yy')을하고있다. sysdate은 이미 날짜입니다. 해당 날짜에서 문자열을 사용하여 NLS_DATE_FORMAT을 사용하는 implcit 변환을 수행 한 다음 dd-mm-yy을 사용하여 명시 적으로 날짜로 다시 변환합니다. 뿐만 아니라 NLS_DATE_FORMAT이 (대략 여유 꽤가) 일치하지 않습니다 당신의 (가) 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_DATE_FORMAT을 상속 어쨌든 NLS_TERRITORY에서부터 여러 지역을 다룰 예정이라면 문제가 될 수 있습니다.

0

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