Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Mendapatkan nomor minggu dari tanggal di MS SQL Server 2005?

Ketahuilah bahwa ada perbedaan dalam apa yang dianggap sebagai angka minggu yang benar, tergantung pada budayanya. Jumlah minggu tergantung pada beberapa asumsi yang berbeda dari satu negara ke negara lain, lihat artikel Wikipedia tentang masalah tersebut. Ada standar ISO (ISO 8601) yang berlaku untuk angka minggu.

Server SQL terintegrasi DATEPART() fungsi tidak selalu melakukan Hal yang Benar. SQL Server mengasumsikan hari 1 dari minggu 1 adalah 1 Januari, untuk banyak aplikasi yang salah.

Menghitung angka minggu dengan benar bukanlah hal yang sepele, dan penerapan yang berbeda dapat ditemukan di web. Misalnya, ada UDF yang menghitung angka minggu ISO dari tahun 1930-2030, menjadi salah satu di antara banyak lainnya. Anda harus memeriksa apa yang cocok untuk Anda.

Yang ini dari Books Online (meskipun Anda mungkin ingin menggunakan jawaban Jonas Lincoln, versi BOL tampaknya salah):

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Fungsi Agregat MIN dan MAX di SQL Server

  2. Cara Membuat Database di SQL Server Dengan Menggunakan TSQL atau GUI - Tutorial SQL Server / TSQL Part 24

  3. Setel opsi 9 dalam prosedur tersimpan SQL Server menggunakan WinHttp.WinHttpRequest.5.1 untuk TLS 1.2

  4. Klausa WHERE vs ON saat menggunakan GABUNG

  5. Bagaimana Fungsi SPACE() Bekerja di SQL Server (T-SQL)