sql oracle sysdate:忽略周末
sql oracle sysdate: ignore weekends
我在我的位置使用此代码:
and table.datum >= sysdate-7
and table.datum <= sysdate
它显示过去 7 天的数据 - 我想补充一点,它会忽略周末(周六和周日) - 我上网查了一下,但没有任何效果!
使用 Between 并添加此 where 语句。
AND table.datum BETWEEN sysdate-7 and sysdate
AND TO_CHAR(to_date(substr(table.datum,1,10), 'DD-MM-YYYY'),
'D', 'NLS_DATE_LANGUAGE=ENGLISH') NOT IN ('1', '7')
@Matt 的回答不是错误证明。 TO_CHAR(..., 'D'
的结果取决于 NLS_TERRITORY
,每个会话可能不同。
由于 TO 似乎是德语(使用 DATUM
作为日期表达式),我什至对 Matt 的解决方案在他的机器上工作感到惊讶。
查看此测试用例:
ALTER SESSION SET NLS_TERRITORY = 'AMERICA';
WITH d AS
(SELECT DATE '2015-03-01' + LEVEL AS datum FROM dual CONNECT BY LEVEL <= 31)
SELECT TO_CHAR(datum, 'yyyy-mm-dd fmDay')
FROM d
WHERE TO_CHAR(datum, 'D', 'NLS_DATE_LANGUAGE=ENGLISH') NOT IN ('1', '7')
AND datum BETWEEN SYSDATE-7 AND SYSDATE;
TO_CHAR(DATUM,'YYYY-MM-DDFMDAY')
2015-03-18 Wednesday
2015-03-19 Thursday
2015-03-20 Friday
2015-03-23 Monday
2015-03-24 Tuesday
ALTER SESSION SET NLS_TERRITORY = 'GERMANY';
WITH d AS
(SELECT DATE '2015-03-01' + LEVEL AS datum FROM dual CONNECT BY LEVEL <= 31)
SELECT TO_CHAR(datum, 'yyyy-mm-dd fmDay')
FROM d
WHERE TO_CHAR(datum, 'D', 'NLS_DATE_LANGUAGE=ENGLISH') NOT IN ('1', '7')
AND datum BETWEEN SYSDATE-7 AND SYSDATE;
TO_CHAR(DATUM,'YYYY-MM-DDFMDAY')
2015-03-18 Wednesday
2015-03-19 Thursday
2015-03-20 Friday
2015-03-21 Saturday
2015-03-24 Tuesday
更安全的是使用Dy
或fmDay
格式
WITH d AS
(SELECT DATE '2015-03-01' + LEVEL AS datum FROM dual CONNECT BY LEVEL <= 31)
SELECT TO_CHAR(datum, 'yyyy-mm-dd fmDay')
FROM d
WHERE TO_CHAR(datum, 'Dy', 'NLS_DATE_LANGUAGE=ENGLISH') NOT IN ('Sun', 'Mon')
AND datum BETWEEN SYSDATE-7 AND SYSDATE;
我在我的位置使用此代码:
and table.datum >= sysdate-7
and table.datum <= sysdate
它显示过去 7 天的数据 - 我想补充一点,它会忽略周末(周六和周日) - 我上网查了一下,但没有任何效果!
使用 Between 并添加此 where 语句。
AND table.datum BETWEEN sysdate-7 and sysdate
AND TO_CHAR(to_date(substr(table.datum,1,10), 'DD-MM-YYYY'),
'D', 'NLS_DATE_LANGUAGE=ENGLISH') NOT IN ('1', '7')
@Matt 的回答不是错误证明。 TO_CHAR(..., 'D'
的结果取决于 NLS_TERRITORY
,每个会话可能不同。
由于 TO 似乎是德语(使用 DATUM
作为日期表达式),我什至对 Matt 的解决方案在他的机器上工作感到惊讶。
查看此测试用例:
ALTER SESSION SET NLS_TERRITORY = 'AMERICA';
WITH d AS
(SELECT DATE '2015-03-01' + LEVEL AS datum FROM dual CONNECT BY LEVEL <= 31)
SELECT TO_CHAR(datum, 'yyyy-mm-dd fmDay')
FROM d
WHERE TO_CHAR(datum, 'D', 'NLS_DATE_LANGUAGE=ENGLISH') NOT IN ('1', '7')
AND datum BETWEEN SYSDATE-7 AND SYSDATE;
TO_CHAR(DATUM,'YYYY-MM-DDFMDAY')
2015-03-18 Wednesday
2015-03-19 Thursday
2015-03-20 Friday
2015-03-23 Monday
2015-03-24 Tuesday
ALTER SESSION SET NLS_TERRITORY = 'GERMANY';
WITH d AS
(SELECT DATE '2015-03-01' + LEVEL AS datum FROM dual CONNECT BY LEVEL <= 31)
SELECT TO_CHAR(datum, 'yyyy-mm-dd fmDay')
FROM d
WHERE TO_CHAR(datum, 'D', 'NLS_DATE_LANGUAGE=ENGLISH') NOT IN ('1', '7')
AND datum BETWEEN SYSDATE-7 AND SYSDATE;
TO_CHAR(DATUM,'YYYY-MM-DDFMDAY')
2015-03-18 Wednesday
2015-03-19 Thursday
2015-03-20 Friday
2015-03-21 Saturday
2015-03-24 Tuesday
更安全的是使用Dy
或fmDay
格式
WITH d AS
(SELECT DATE '2015-03-01' + LEVEL AS datum FROM dual CONNECT BY LEVEL <= 31)
SELECT TO_CHAR(datum, 'yyyy-mm-dd fmDay')
FROM d
WHERE TO_CHAR(datum, 'Dy', 'NLS_DATE_LANGUAGE=ENGLISH') NOT IN ('Sun', 'Mon')
AND datum BETWEEN SYSDATE-7 AND SYSDATE;