3

週の最初の日の日付を取得したいのですが、NLS パラメータに依存させたいです。たとえば、アメリカで実行すると日曜日の日付が表示されるはずですが、トルコでは月曜日が表示されるはずです..

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

どうすれば依存させることができますか?

4

2 に答える 2

5

documentationによると、trunc(sysdate, 'IW')次のものが提供されます。

ISO 8601 標準で定義されている暦週の最初の曜日 (月曜日) と同じ曜日

これまで見てきたように、これは明らかに NLS 依存ではありません。

を使用すると、ISO に依存しない NLS に依存しないバージョンが得られると思うかもしれませんWが、それは別のことを行います。月の初日と同じ曜日です。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

ちなみに、元のクエリはto_date(sysdate,'dd-mm-yy'). sysdateはすでにデートです。NLS_DATE_FORMATその日付から を使用する文字列への暗黙的な変換を強制し、次に を使用して日付への明示的な変換を強制しています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れているので、とにかく複数のリージョンを扱うことを期待している場合、これは問題になる可能性があります.

于 2013-07-18T13:25:59.540 に答える
0

iso週を使用する場合、すべての地域で同じです。いつも月曜日に戻ってきます。

これを使用する代わりに;

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
于 2015-09-30T11:24:02.457 に答える