sql >> データベース >  >> RDS >> Sqlserver

MS SQL Server 2005の日付から週番号を取得しますか?

    文化によって、正しい週数と見なされるものに違いがあることに注意してください。週数は国ごとに異なるいくつかの仮定に依存します。この問題に関するウィキペディアの記事を参照してください。週番号に適用されるISO標準(ISO 8601)があります。

    SQLサーバーに統合されたDATEPART() 関数は必ずしも正しいことをするわけではありません。 SQL Serverは、多くのアプリケーションが間違っているため、第1週の1日目が1月1日であると想定しています。

    週数を正しく計算することは簡単ではなく、さまざまな実装がWeb上にあります。たとえば、1930年から2030年までのISO週数を計算するUDFがあります。何が効果的かを確認する必要があります。

    これはBooksOnlineからのものです(おそらくJonas Lincolnの回答からのものを使用したいと思うかもしれませんが、BOLバージョンは正しくないようです):

    CREATE FUNCTION ISOweek  (@DATE DATETIME)
    RETURNS INT
    AS
    BEGIN
       DECLARE @ISOweek INT
       SET @ISOweek = DATEPART(wk,@DATE) 
                      +1 
                      -DATEPART(wk,CAST(DATEPART(yy,@DATE) AS CHAR(4))+'0104')
       -- Special cases: Jan 1-3 may belong to the previous year
       IF (@ISOweek=0)
          SET @ISOweek = dbo.ISOweek(CAST(DATEPART(yy,@DATE) - 1
                         AS CHAR(4))+'12'+ CAST(24+DATEPART(DAY,@DATE) AS CHAR(2)))+1
       -- Special case: Dec 29-31 may belong to the next year
       IF ((DATEPART(mm,@DATE)=12) AND
          ((DATEPART(dd,@DATE)-DATEPART(dw,@DATE))>= 28))
          SET @ISOweek=1
       RETURN(@ISOweek)
    END
    GO
    


    1. 区切られた文字列をOracleの行に変換します

    2. SQL ServerでのPI()の例

    3. T-SQLとは何ですか?

    4. 一致率を使用したSQLServerあいまい検索