按星期几过滤

时间:2018-06-14 17:36:49

标签: sql sql-server oracle

我有一个列需要按星期几来过滤。该列的格式为:

(00/00/yyyy) (06/09/2017)

现在我必须在每周的每个星期二过滤。

我需要一种只显示星期二数据的语法。我没有星期几列,其中isdate列有(00/00/0000)。我正在使用Oracle和SQL Server。

2 个答案:

答案 0 :(得分:1)

我完全认为应该为每个数据库创建一个日历表/日期维度。对于这样的情况,它非常有用。它可以很好地扩展。

SQL Fiddle

MS SQL Server 2017架构设置

/* My test table for dates. */
CREATE TABLE t1 (id int identity, myDate date) ;

INSERT INTO t1 ( myDate )
VALUES 
    ('2018-01-01')
  , ('2018-01-02')
  , ('2018-01-03')
  , ('2018-01-04')
  , ('2018-01-05')
  , ('2018-01-06')
  , ('2018-01-07')
  , ('2018-01-08')
  , ('2018-01-09')
  , ('2018-01-10')
;

SET DATEFIRST 7;  /* Make sure Sunday is the first day of the week. */

/* My calendar table / date dimension. */
CREATE TABLE cal
(
  [date]       DATE PRIMARY KEY, 
  /* Add whatever parts you need easy access to. */
  [day]        AS DATEPART(DAY,      [date]),
  [month]      AS DATEPART(MONTH,    [date]),
  [year]       AS DATEPART(YEAR,     [date]),
  [DayOfWeek]  AS DATEPART(WEEKDAY,  [date])
)
;

INSERT INTO cal ([date])
VALUES 
    ('2018-01-01')
  , ('2018-01-02')
  , ('2018-01-03')
  , ('2018-01-04')
  , ('2018-01-05')
  , ('2018-01-06')
  , ('2018-01-07')
  , ('2018-01-08')
  , ('2018-01-09')
  , ('2018-01-10')
;

现在只是一个简单的查询。

SELECT t1.* 
FROM t1
INNER JOIN cal ON t1.myDate = cal.[date]
  AND cal.[DayofWeek] = 3  /* Tuesday */

<强> Results

| id |     myDate |
|----|------------|
|  2 | 2018-01-02 |
|  9 | 2018-01-09 |

我总是发现Aaron Bertrand创建日历表是一个很好的资源的例子:https://www.mssqltips.com/sqlservertip/4054/creating-a-date-dimension-or-calendar-table-in-sql-server/

答案 1 :(得分:0)

SQL Server中,您可以使用DATENAME()功能:

. . . 
WHERE DATENAME(WEEKDAY, DATE) = 'Thursday';

这假定DATE具有合理的格式,否则您需要使用cast/convert函数调整日期格式。