2011年5月11日 星期三

sybase SQL 取得當週星期一(get Monday)

背景說明:要取得當周第一天。(通常系統都是把星期天設為當週第一天)所以一般來說,只要呼叫一個 類似  weekday 之類的函數得出目前是 當周的第 n 天,然後把目前日減掉 n即可。

問題: 以星期一做為一周的第一天。帶入日期取得當週第一天。
原本將日期帶入 weekday 的函數得到的 數字  1~7 直接減的話,得到的日期是星期天。



 一 二 三 四  五 六 日 :星期
 2  3  4  5  6  7  1 :S= Sybase DATEPART( WEEKDAY ... ) 取得的值
 0 -1 -2 -3 -4 -5 -6 : D=每個不同日子需要減的數量(要取得星期一做為當週的第一天的話)

 D = - ( S + 5 ) % 7


範例: 假設日期欄位為  uptDate

DATEADD(
    Day,
    - MOD(
        DATEPART( Weekday,
          convert( datetime,
            convert( char(10), uptDate, 102 ),
            102
          )
        ) + 5,
        7
      ),
    convert(datetime,convert(char(10),uptDate,102),102)
  )






reference:
Sybase Date function:http://manuals.sybase.com/onlinebooks/group-as/asg1250e/sqlug/@Generic__BookTextView/34010;pt=30348/*
Sybase Datatype conversion functionshttp://manuals.sybase.com/onlinebooks/group-as/asg1250e/sqlug/@Generic__BookTextView/34781;pt=35709

沒有留言: