我有2天的名字作为输入(例如:“星期五”和“星期一”。我需要在星期五和星期一(星期五,星期六,星期日,星期一)之间从表中获取所有日期。如果是“星期二”和“星期四”,我需要(周二,周三和周四)
我的桌子是
如果是星期五和星期一。我的输出应该是
我试过这个
SELECT
EMPLID, DUR, DayName, TRC
FROM DayTable
WHERE
DayName BETWEEN 'FRIDAY' AND 'MONDAY'
ORDER BY DUR ASC
但没有工作,请帮我解决这个问题。在此先感谢
答案 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