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

Isoweek di SQL Server 2005

Ada tautan di sini untuk upaya sebelumnya lainnya http://www.sqlteam. com/forums/topic.asp?TOPIC_ID=60510

Ini adalah kode LAMA untuk fungsi

CREATE function f_isoweek(@date datetime)
RETURNS INT
as
BEGIN
DECLARE @rv int

SELECT @rv = datediff(ww, dateadd(ww, datediff(d, 0, dateadd(yy, datediff(yy, 0, day4),3))/7,-4),day4)
FROM (SELECT dateadd(ww, datediff(day, 0, @date)/7, 3) day4) a

RETURN @rv
END

Setelah menggabungkan jawaban brilian @AndriyM dengan jawaban saya sendiri, kami turun ke 1 baris. Ini adalah kode BARU.

CREATE function f_isoweek(@date datetime)
RETURNS INT
as
BEGIN

RETURN (datepart(DY, datediff(d, 0, @date) / 7 * 7 + 3)+6) / 7
-- replaced code for yet another improvement.
--RETURN (datepart(DY, dateadd(ww, datediff(d, 0, @date) / 7, 3))+6) / 7

END

Penjelasan untuk kode lama (tidak akan menjelaskan kode baru. Ini adalah fragmen dari kode saya dan kode AndriyM):

Menemukan hari kerja 4 dari tanggal yang dipilih

dateadd(week, datediff(day, 0, @date)/7, 3) 

Menemukan isoyear - tahun hari kerja 4 minggu selalu tahun yang sama dengan isoyear minggu itu

datediff(yy, 0, day4)

Saat menambahkan 3 hari ke hari pertama isoyear, hari acak dari isoweek pertama isoyear ditemukan

dateadd(yy, datediff(yy, 0, day4),3)

menemukan minggu relatif dari isoweek pertama isoyear

datediff(d, 0, dateadd(yy, datediff(yy, 0, day4),3))/7

Menemukan hari Senin dikurangi 4 hari dari isoweek pertama menghasilkan kamis dalam seminggu SEBELUM hari pertama isoweek pertama isoyear

dateadd(ww, datediff(d, 0, dateadd(yy, datediff(yy, 0, day4),3))/7,-4)

Mengetahui kamis pertama dalam seminggu sebelum isoweek pertama dan kamis pertama dari minggu yang dipilih, membuatnya cukup mudah untuk menghitung minggu, tidak peduli tanggal pengaturan mana yang pertama karena hari kerja dari kedua tanggal adalah kamis.

datediff(ww, dateadd(ww, datediff(d, 0, dateadd(yy, datediff(yy, 0, day4),3))/7,-4),day4)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Memperbarui 4 juta catatan di server SQL menggunakan daftar id catatan sebagai input

  2. Cara mengekspor file csv berdasarkan kueri SQL secara terprogram

  3. database terlampir hanya baca

  4. Bisakah transaksi dibatalkan setelah dilakukan dan koneksi ditutup?

  5. OPENJSON "Sintaks salah di dekat kata kunci 'dengan'." di SQL Server (ASK)