今週の誕生日の記録を取得しようとしていますが、query
その間に生まれた人を返しますTuesday and Monday
。の間に生まれた人が欲しいですMonday and Sunday
。クエリを変更するにはどうすればよいですか?
WHERE TO_CHAR(SYSDATE, 'WW') = TO_CHAR(BIRTHDAY_DATE, 'WW')
おそらく月曜日はあなたの週の最初の日ではありません。
システムでは、次の方法で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です。
私の質問に答えてくれてありがとう。私は解決策を見つけました。ここで、現在の週の日、月の文字列を作成します。
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」はエラドが言ったように機能します。
これを試してみてください、
WHERE BIRTHDAY_DATE between sysdate - (TO_CHAR(SYSDATE, 'WW')) + 1 AND sysdate - (TO_CHAR(SYSDATE, 'WW')) + 7