none
sql 語法的問題 RRS feed

  • 問題

  • 請問

    sql 函數中有  可以直接求出   "現在是這個月的第幾週 ? "

     

    沒有的話  要怎麼寫ㄋ ?

    2006年5月23日 上午 09:29

解答

  • Hi: 您好,

    具個人所知,目前在T-SQL中,並沒有函數可以直接符合您的需求,但是您可以使用以下的範例來完成:

    /*
    本函數使用: Sunday 作為當週的最後一天
    */
    -- 建立使用者自訂函數: udf_WeekOfMonth

    create function udf_WeekOfMonth(@Date datetime)
    returns integer as
    begin
    return
    datediff(week,case when (@@Datefirst + datepart(weekday,dateadd(month,datediff(month,0,@Date),0))) % 7 = 1
    then dateadd(month,datediff(month,0,@Date),0) - 1 else  dateadd(month,datediff(month,0,@Date),0) end ,
    case when (@@Datefirst + datepart(weekday,@Date)) % 7 = 1
    then @Date-1 else @Date end ) + 1 end
    GO

    -- 執行使用者自訂函數
    SELECT dbo.udf_WeekOfMonth(getdate())


    希望對您有幫助 ...

    Best Regards
    Derrick Chen 德瑞克

    2006年5月25日 下午 02:07

所有回覆

  • Hi: 您好,

    具個人所知,目前在T-SQL中,並沒有函數可以直接符合您的需求,但是您可以使用以下的範例來完成:

    /*
    本函數使用: Sunday 作為當週的最後一天
    */
    -- 建立使用者自訂函數: udf_WeekOfMonth

    create function udf_WeekOfMonth(@Date datetime)
    returns integer as
    begin
    return
    datediff(week,case when (@@Datefirst + datepart(weekday,dateadd(month,datediff(month,0,@Date),0))) % 7 = 1
    then dateadd(month,datediff(month,0,@Date),0) - 1 else  dateadd(month,datediff(month,0,@Date),0) end ,
    case when (@@Datefirst + datepart(weekday,@Date)) % 7 = 1
    then @Date-1 else @Date end ) + 1 end
    GO

    -- 執行使用者自訂函數
    SELECT dbo.udf_WeekOfMonth(getdate())


    希望對您有幫助 ...

    Best Regards
    Derrick Chen 德瑞克

    2006年5月25日 下午 02:07
  • 可以大概解釋一下邏輯嗎 ?  看不太懂 (請包涵 菜菜子)

    尤其是 :

    select datediff(month,0,getdate())

    datediff 不是用來求 2 個時間差嗎 ?

    2006年5月26日 上午 02:59