询问本周出生的人

时间:2013-01-17 06:26:31

标签: sql oracle

我正在尝试获取本周内生日所在的记录,但我的query会返回Tuesday and Monday之间出生的人。我希望在Monday and Sunday之间出生的人。如何更改查询?

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

3 个答案:

答案 0 :(得分: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。

答案 1 :(得分: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'就像埃拉多说的那样。

答案 2 :(得分:0)

请试试这个,

WHERE BIRTHDAY_DATE between sysdate - (TO_CHAR(SYSDATE, 'WW')) + 1 AND sysdate - (TO_CHAR(SYSDATE, 'WW')) + 7