我有一个列需要按星期几来过滤。该列的格式为:
(00/00/yyyy) (06/09/2017)
现在我必须在每周的每个星期二过滤。
我需要一种只显示星期二数据的语法。我没有星期几列,其中isdate列有(00/00/0000)
。我正在使用Oracle和SQL Server。
答案 0 :(得分:1)
我完全认为应该为每个数据库创建一个日历表/日期维度。对于这样的情况,它非常有用。它可以很好地扩展。
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
函数调整日期格式。