3

今週の誕生日の記録を取得しようとしていますが、queryその間に生まれた人を返しますTuesday and Monday。の間に生まれた人が欲しいですMonday and Sunday。クエリを変更するにはどうすればよいですか?

WHERE TO_CHAR(SYSDATE, 'WW') = TO_CHAR(BIRTHDAY_DATE, 'WW')
4

3 に答える 3

2

おそらく月曜日はあなたの週の最初の日ではありません。

システムでは、次の方法でNLS_TERRITORY値を取得できます。

パラメータを表示するNLS_TERRITORY

どのセッションでも、そのように設定できます

現在のセッション用に設定します。

ALTER SESSION SET NLS_TERRITORY=slovenia
SELECT to_char(to_date('13.01.2013','DD.MM.YYYY'),'d') from dual;--SUNDAY

結果は7です。

ALTER SESSION SET NLS_TERRITORY=america
select to_char(to_date('13.01.2013','DD.MM.YYYY'),'d') from dual--SUNDAY

結果は1です。

于 2013-01-17T06:48:30.220 に答える
1

私の質問に答えてくれてありがとう。私は解決策を見つけました。ここで、現在の週の日、月の文字列を作成します。

DateTime sdate = DateTime.Now.AddDays(-1 * (int)DateTime.Now.DayOfWeek + 1);
        string findDay = "";
        for (int i = 0; i < 7; i++)
            findDay += (findDay.Length > 0 ? "," : "") + "'" + sdate.AddDays(i).Day.ToString("00") + "." + sdate.AddDays(i).Month.ToString("00") + "'";

そしてSQL:

WHERE TO_CHAR(BIRTHDAY_DATE, 'DD.MM') IN (" + findDay + ")

「WW」はエラドが言ったように機能します。

于 2013-01-17T07:45:22.333 に答える
0

これを試してみてください、

WHERE BIRTHDAY_DATE between sysdate - (TO_CHAR(SYSDATE, 'WW')) + 1 AND sysdate - (TO_CHAR(SYSDATE, 'WW')) + 7
于 2013-01-17T06:47:47.923 に答える