【问题标题】:SQL return only business daysSQL 仅返回工作日
【发布时间】:2014-08-08 22:43:10
【问题描述】:

我有一个 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))

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

【问题讨论】:

    标签: sql sybase


    【解决方案1】:

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

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

    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
    

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

    【讨论】:

    • 您是否会知道这是否可以使用 Sybase businessday() 函数在纯 SQL 中进行模拟?
    • @jimmyjames businessday() 不知道公共假期。
    猜你喜欢
    • 2017-12-30
    • 2015-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    • 2018-11-11
    • 2010-11-20
    相关资源
    最近更新 更多