如何从表中获取2天名称之间的日期

时间:2018-01-22 10:29:42

标签: sql sql-server-2008

我有2天的名字作为输入(例如:“星期五”和“星期一”。我需要在星期五和星期一(星期五,星期六,星期日,星期一)之间从表中获取所有日期。如果是“星期二”和“星期四”,我需要(周二,周三和周四)

我的桌子是

enter image description here

如果是星期五和星期一。我的输出应该是

enter image description here

我试过这个

      SELECT
           EMPLID, DUR, DayName, TRC
      FROM DayTable
      WHERE         
          DayName BETWEEN 'FRIDAY' AND  'MONDAY'        
      ORDER BY DUR ASC

但没有工作,请帮我解决这个问题。在此先感谢

4 个答案:

答案 0 :(得分:1)

您不能像这样使用Between运算符。 Datename返回一个字符串,而between运算符对于所有以lexigraphically落在" Friday"之间的所有日期名称为tru。和"星期一"。

我建议使用

 DayName in  ('FRIDAY','SATURDAY','SUNDAY',  'MONDAY'   )

或使用

set datefirst 2
...
where  datepart(weekday,DUR)>3

答案 1 :(得分:1)

如果您在DUR上使用DATEPART功能,您将获得工作日的整数表示。

因此更新WHERE子句:

SELECT
       EMPLID, DUR, DayName, TRC
  FROM DayTable
  WHERE         
      DATEPART(weekday, DUR) BETWEEN 2 AND 6         
  ORDER BY DUR ASC

其中datepart将为您提供工作日整数:SUN - > 1,MON-> 2 ... SAT - > 7

https://docs.microsoft.com/pt-br/sql/t-sql/functions/datepart-transact-sql

答案 2 :(得分:1)

尝试此查询:

22 rows
test1 [0.08138518501073122, 0.07786444900557399, 0.0775048139039427]
test2 [0.2644687460269779, 0.26298125297762454, 0.2618108610622585]
test3 [0.10624988097697496, 0.1028324980288744, 0.10304366517812014]
220 rows
test1 [0.07999306707642972, 0.07842653687112033, 0.07848454895429313]
test2 [1.9794962559826672, 1.966513831866905, 1.9625889619346708]
test3 [0.12691736104898155, 0.12642419710755348, 0.126510804053396]

希望这有帮助!

更新

这是表值函数中的相同解决方案:

.astype('datetime[s]')

以下是一些示例方案:

chrome.tabs.executeScript(tabs[0].id, {code: '...'});

要在您的查询中使用此功能,您可以:

DECLARE @From int,@To int

Create Table #Days(Id int, DayOfWeek Varchar(100))
Insert into #Days Values
(1,'Sunday'),
(2,'Monday'),
(3,'Tuesday'),
(4,'Wednesday'),
(5,'Thursday'),
(6,'Friday'),
(7,'Saturday')

Select @From = Id from #Days where DayOfWeek = 'Friday'
Select @To = Id from #Days where DayOfWeek = 'Monday'

Select T.EMPLID, T.DUR, T.DayName, T.TRC from DayTable T
Inner Join #Days D on T.DayName = D.DayOfWeek AND (D.Id <= @To Or D.Id >= @From)

答案 3 :(得分:1)

如果你知道你的sql server的设置开始星期几是a,那么你可以尝试这个查询:

Sunday

星期一的周指数= 2,周五= 6