專家回答:
對于許多跟商業日期有關的情況,最好的解決方案是使用日歷表格。例如,使用辦公時間(2001年5月22日)查詢兩個日期之間的時間差。
我們知道在這個例子中,假日不會計算在內。很難明白為什么假日不被計算在內,但是周末卻會被計算在內。但是既然假日不被計算在內,我們就可以應用一個公式。要開發這個公式,讓我們首先探討一下所有的可能性。
如果今天是星期一,那么,往回數,我們跳過星期天和星期六,星期五是一天前,星期四是兩天前,如此類推,那么“五天前”就是上個星期一。這里的“五天前”就意味著把周末排除出去,得出我們想要的日期,并不是真正字面意義上的五天前。我們可以從備忘錄上看到差別。
如果今天是星期二,那么,往回數,星期一是一天前,跳過星期天和星期六,星期五是兩天前,星期四是三天前,如此類推,那么“五天前”就是上個星期二。
這個模式——“五天前”就是上一個星期的同一天(星期X)——可重復到星期三、星期四和星期五。
到了星期六,這個模式就不可用了。在星期六,五天前是星期一。在星期天,因為我們不計算星期六,五天前也是星期一。
把我們的討論發現總結成如下數據:
要獲得“五天前”的日期,從今天減去的總天數(包括周末)顯示在右邊列中。
我們給一個星期里的每一天排上序號,星期天(Sunday)=1,星期一(Monday)=2,如此類推,到星期六(Saturday)=7。把這些日子的序號排列在需要減去的天數前,我們會得到如下數據:
if today is |
weekday | subtract |
Monday |
2 | 7 |
Tuesday |
3 | 7 |
Wednesday | 4 | 7 |
Thursday |
5 | 7 |
Friday |
6 | 7 |
Saturday |
7 | 5 |
Sunday |
1 | 6 |
公式如下:
subtract = 7 - 2*(weekday/7) + (weekday-2)/7
記住,這是要獲得“五天前”的日期而需要從今天減去的天數。在這個公式里,除法是整數除法(即下舍入)。請不要問我這個公式是怎么發現的,反正是試差法的成果。
我們要怎么把這個公式應用到SQL里呢?下面是一個運用MySQL句法的例子:
以下為引用的內容:
selectdistinct |
這個查詢可以獲得“五天前”下訂單而貨還沒有運到的客戶的聯系方式。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com