我有 2 天名称作为输入(例如:“星期五”和“星期一”。我需要从周五和周一(周五、周六、周日、周一)之间的表格中获取所有日期。如果是“星期二”和“星期四”,我需要得到(星期二,星期三和星期四)
我的桌子是
如果日子是星期五和星期一。我的输出应该是
我试过这个
SELECT
EMPLID, DUR, DayName, TRC
FROM DayTable
WHERE
DayName BETWEEN 'FRIDAY' AND 'MONDAY'
ORDER BY DUR ASC
但不工作,帮我解决这个问题。提前致谢
如果在DUR上使用DATEPART函数,将获得工作日的整数表示。
因此,更新WHERE子句:
SELECT
EMPLID, DUR, DayName, TRC
FROM DayTable
WHERE
DATEPART(weekday, DUR) BETWEEN 2 AND 6
ORDER BY DUR ASC
其中datepart将给出工作日整数:SUN -
https://learn.microsoft.com/pt-br/sql/t-sql/functions/datepart-transact-sql
您不能这样使用之间运算符。Datename返回一个字符串,对于所有在词汇上位于“星期五”和“星期一”之间的日名,之间运算符是tru。
我建议使用
DayName in ('FRIDAY','SATURDAY','SUNDAY', 'MONDAY' )
或使用
set datefirst 2
...
where datepart(weekday,DUR)>3
尝试以下查询:
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)
希望这有帮助!
以下是表值函数中的相同解决方案:
create function dbo.DaysBetween (
@DayFrom nvarchar(16)
, @DayTo nvarchar(16)
) returns @results table ([DayName] nvarchar(16))
as
begin
declare @daynames table (id smallint not null, [dayname] nvarchar(16) not null)
insert @daynames(id, [dayname])
values (0, 'Monday'),(1, 'Tuesday'),(2, 'Wednesday'),(3, 'Thursday'),(4, 'Friday'),(5, 'Saturday'),(6, 'Sunday')
declare @dayFromInt smallint
, @dayToInt smallint
select @dayFromInt = id from @daynames where [dayname] = @DayFrom
if (@dayFromInt is null)
begin
--hacky trick from https://stackoverflow.com/a/4681815/361842
set @dayFromInt = cast(('Invalid Day From Name: ' + @DayFrom) as int)
return
end
select @dayToInt = id from @daynames where [dayname] = @DayTo
if (@dayToInt is null)
begin
--hacky trick from https://stackoverflow.com/a/4681815/361842
set @dayToInt = cast(('Invalid Day To Name: '+ @DayTo) as int)
return
end
insert @results ([dayname])
select [dayname]
from @daynames
where
(
(@dayFromInt <= @dayToInt) and (id between @dayFromInt and @dayToInt)
or
(@dayFromInt > @dayToInt) and (id >= @dayFromInt or id <= @dayToInt)
)
return
end
go
以下是一些示例场景:
select * from dbo.DaysBetween('Monday','Friday')
select * from dbo.DaysBetween('Friday','Monday')
select * from dbo.DaysBetween('Tuesday','Thursday')
select * from dbo.DaysBetween('Thursday','Tuesday')
select * from dbo.DaysBetween('Christmasday','Monday')
go --required to get this result after the above error
select * from dbo.DaysBetween('Monday','Holiday')
要在查询中使用它,您需要:
SELECT EMPLID
, DUR
, DayName
, TRC
FROM DayTable
WHERE
[DayName] in
(
select [DayName]
from dbo.DaysBetween('Friday','Monday')
)
ORDER BY DUR ASC
问题内容: 如何从Python中的日期时间对象获取日期名称(例如星期一,星期二,星期三,星期四,星期五,星期六和星期日)? 因此,例如,应该给我。 问题答案: 有关datetime.now,datetime.strftime以及有关strftime的更多信息,请参见Python文档。
问题内容: 如何获取JavaScript中两个日期之间的天数?例如,在输入框中指定两个日期: 问题答案: 这是快速的实现,作为解决问题中提出的问题的概念证明。它依赖于这样一个事实,您可以通过减去两个日期来获得两个日期之间经过的毫秒数,这会将它们强制为原始数字值(自1970年初以来的毫秒数)。 您应该注意,“常规”日期API(名称中没有“ UTC”)在用户浏览器的本地时区中运行,因此,如果您的用户所
问题内容: 在我的应用程序中,用户应从选择日期。问题是生成此列表。例如,我需要 2010年至2013年 或 6月至8月 之间的所有日期(期间可能是 day , month , year )。是否有任何方法可以获取该数据? 范例:我需要 2013年1月1* 日 至2013年1月1 日之间的日期 * 2013年1月1日 2013年2月1日 2013年3月1日 2013年4月1日 2013年5月1日
问题内容: 我想要一个开始日期和结束日期之间的日期列表。 结果应为所有日期的列表,包括开始日期和结束日期。 问题答案: 一次添加一天直到达到结束日期: 实现自己的迭代器也可以做到这一点并不难,那就更好了。
问题内容: 我想100天前从13年4月8日开始作为日期。 如何使用pl / sql执行此操作? 问题答案: 假设情况是您所处的字符串。因此,您需要将其转换为using函数,然后简单地减去100个文字。 的SQL 2 from dual 3 / RES 29-12-2012 PL / SQL 2 l_res_date date; 3 l_in_date varchar2(11) := ‘08-APR
问题内容: 我希望“范围”是一个日期对象数组,两个日期之间的每一天。 诀窍在于它也应该处理月份和年份的边界。 问题答案: