SQL仅返回工作日

时间:2014-08-08 14:36:39

标签: sql sybase

我有一个Sybase数据库,我正试图从当天和上一个工作日开始。我写了以下内容,但如果在星期一运行它,它就不会在上周五得到,因为周末会阻碍。谁能告诉我如何解决这个问题?

Select distinct price_date
From table
Where price_date IN (convert(varchar(10), dateadd(day, 0, getdate()), 101), 
    convert(varchar(10), dateadd(day, -1, getdate()),101))

转换语句用于修剪日期时间戳的时间,我知道这很麻烦。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

您需要一张日历表。这是因为数据库不知道哪几天是工作日。

只需创建一个表格,其中包含您感兴趣的范围内的每一天,并标记哪些是工作日或不是工作日:

Create Table BusinessCalendar(
      dt date primary key,
      fWorkingDay bit
)

然后你可以找到"下一个工作日"像这样:

select min(dt) from BusinessCalendar cal where cal.dt > @whenever and fWorkingDay = 1

你可以找到上一个工作日:

select max(dt) from BusinessCalendar cal where cal.dt < @whenever and fWorkingDay = 1

日历表还可能包含其他与日期相关的内容,例如您可能需要的夏令时等。