Web design and hosting, database, cloud and social media solutions that deliver business results
  • İş çözümleri
    • Robotik Süreç Otomasyonu
    • Veritabanı Hizmetleri
      • Veri Entegrasyonu
      • Araçlar
    • Yazılım
    • Web Sitesi Tasarımı
      • Web Sitesi Güvenliği
      • Web Yerelleştirme ve Çeviri
    • İş hizmetleri
      • Microsoft Azure
    • Microsoft Office
    • Sosyal Medya
  • Akademi
    • Test Ortamımız
    • Veritabanı Tasarımını Öğrenme
      • SQL-Server
      • SQL Server 2008 Bakım Planı
      • SQL Server işlevlerini kullanma
      • SQL Server Pivot-Unpivot'u Kullanma
      • SQL Server Tarihlerini Kullanma
    • Web Sitesi Tasarımı Öğrenme
      • ASP-NET
      • CSS
  • Hakkında
    • kariyer
      • İngilizce-Türkçe Çevirmen
    • Portföy
    • Takım
      • Adrian Anandan
      • Ali El Amin
      • Ayşe Hür
      • Chester Copperpot
      • Gavin Clayton
      • Sai Gangu
      • Sunel Kumar
      • Surya Mukkamala
čeština (CS)Deutsch (DE)English (EN-GB)English (EN-US)Español (ES)Français (FR)हिंदी (HI)italiano (IT)日本語 (JA)polski (PL)Português (PT)русский (RU)Türk (TR)中国的 (ZH)

Ayın Belirli Gününü Döndürme İşlevi

SQL Server 2008, Ayın Belirli Gününü Döndürme İşlevi
SQL Server Tarih İşlevlerini Kullanma

Bu, bir komut dosyası kullanabileceğimiz ve belirli bir günde (geçen Pazar veya 1. Hafta içi gibi) çalışacak kod ekleyebildiğimiz için, bakım planımız için faydalı oldu, ayrıca İşlerin çalışacağı saatleri tahmin etmek için de kullandım. sunucularımız.

İşlev, ilgilendiğiniz ay, tür ve sayı olmak üzere yalnızca üç giriş gerektirir.

Aylık iş programları için Microsoft'un kullandığına benzer bilgileri kullanır.

devamı: SQL Server esnek tarih Fonksiyonlar ve takvim Tablosu

SQL

CREATE FUNCTION dbo.GetMonthDay(@Month DATETIME,@Type INT, @Counter INT) RETURNS DATETIME AS BEGINSET @Month = CONVERT(DATE,DATEADD(DAY,1-DATEPART(DAY,@Month),@Month))DECLARE @CurDate DATETIME=@Month,@Date DATETIME,@Matches INT=0,@TempDate DATETIMEWHILE @CurDateIF (SELECT (CASE @Type WHEN 1 THEN (CASE WHEN DATEPART(WeekDay,@CurDate)=1 THEN 1 ELSE 0 END)WHEN 2 THEN(CASE WHEN DATEPART(WeekDay,@CurDate)=2 THEN 1 ELSE 0 END)WHEN 3 THEN(CASE WHEN DATEPART(WeekDay,@CurDate)=3 THEN 1 ELSE 0 END)WHEN 4 THEN(CASE WHEN DATEPART(WeekDay,@CurDate)=4 THEN 1 ELSE 0 END)WHEN 5 THEN(CASE WHEN DATEPART(WeekDay,@CurDate)=5 THEN 1 ELSE 0 END)WHEN 6 THEN(CASE WHEN DATEPART(WeekDay,@CurDate)=6 THEN 1 ELSE 0 END)WHEN 7 THEN(CASE WHEN DATEPART(WeekDay,@CurDate)=7 THEN 1 ELSE 0 END)WHEN 8 THEN(CASE WHEN DATEPART(WeekDay,@CurDate) IN (1,2,3,4,5,6,7) THEN 1 ELSE 0 END)WHEN 9 THEN(CASE WHEN DATEPART(WeekDay,@CurDate) IN (2,3,4,5,6) THEN 1 ELSE 0 END)WHEN 10 THEN (CASE WHEN DATEPART(WeekDay,@CurDate) IN (1,7) THEN 1 ELSE 0 END)ELSE 0 END))=1 BEGINSET @Matches = @Matches+1SET @TempDate = @CurDateENDIF @Matches=@Counter AND @Counter<32 BEGINSET @Date=@TempDateENDSET @CurDate=DATEADD(DAY,1,@CurDate)ENDRETURN ISNULL(@Date,@TempDate)ENDGO

Bu ne yapar

Elimizdeki değerler sysschedules tablosuna benziyor ama burada listeleyeceğim;

@Tip

  • 1=Pazar
  • 2=Pazartesi
  • 3=Salı
  • 4=Çarşamba
  • 5=Perşembe
  • 6=Cuma
  • 7=Cumartesi
  • 8=Sayaca kadar herhangi bir gün veya ayın son günü
  • 9=hafta içi herhangi bir gün veya ayın son günü
  • 10=sayaca kadar herhangi bir Cumartesi veya Pazar veya ayın son tekrarı

@Tezgah

  • 1=1.
  • 2=2.
  • 3=3.
  • 4=4.
  • 32=Son (bunlar biraz farklıdır)

İzlediği adımlar şu şekildedir;

  • Giriş tarihini ayın ilk gününe ayarlayın
  • Ay boyunca döngümüz için değişkenler bildirin
  • Her bir tarihi gözden geçirin ve bir eşleşme varsa eşleşme sayısını güncelleyin ve son eşleşmeyi tutmak için geçici bir tarihi güncelleyin
  • Eşleşmeler bizim sayacımıza eşitse ve sayaç 5'ten küçükse (5=son gün) o zaman dönüş tarihimizi geçici tarih olarak ayarlayın, tarih artık boş olmadığı için bu döngüden çıkacaktır.
  • Güncel tarihimize bir tane ekleyip kontrolümüzü tekrar gerçekleştirelim.
  • Tarihimizi döndürün veya null ise son eşleşmemiz olan geçici tarihi.

Aşağıda kullanımda bir örneğidir. Bu, Şubat ayının her Pazar günü gerçekleştirilecek.

Saklı bir yordamın belirli bölümlerinin çalıştırılıp çalıştırılmayacağını belirlemek için bir IF yan tümcesinde kullanabilirsiniz.

Testing

SELECT Utilities.dbo.GetMonthDay('2020-02-11',1,1) --2020-02-02 00:00:00.000SELECT Utilities.dbo.GetMonthDay('2020-02-11',1,2) --2020-02-09 00:00:00.000SELECT Utilities.dbo.GetMonthDay('2020-02-11',1,3) --2020-02-16 00:00:00.000SELECT Utilities.dbo.GetMonthDay('2020-02-11',1,4) --2020-02-23 00:00:00.000SELECT Utilities.dbo.GetMonthDay('2020-02-11',1,32)--2020-02-23 00:00:00.000IF Utilities.dbo.GetMonthDay('2020-02-11',1,32)='2020-02-23' BEGINSELECT 'Run your code'END

daha fazla okuma

Umarım işinize yarar veya diğer işlemler için fikir verir.

Tatillerle hesaplamanız gerekiyorsa, bir takvim tablosuna ihtiyacınız olacak ve aşağıdaki bağlantıda harika bir örnek görebilirsiniz.

daha fazlası: Esnek seçeneklerle bir SQL Server İşlevinde bugüne kadar çalışma günleri ekleyin

Author

Helpful?

Please note, this commenting system is still in final testing.
Copyright Claytabase Ltd 2020

Registered in England and Wales 08985867

RSSLoginLink Çerez politikasısite haritası

Social Media

facebook.com/Claytabaseinstagram.com/claytabase/twitter.com/Claytabaselinkedin.com/company/claytabase-ltd

Get in Touch

+442392064871info@claytabase.comClaytabase Ltd, Unit 3d, Rink Road Industrial Estate, PO33 2LT, United Kingdom
Bu sitedeki ayarlar tüm çerezlere izin verecek şekilde ayarlanmıştır. Bunlar, çerez politikamız ve ayarlar sayfamızdan değiştirilebilir. Bu siteyi kullanmaya devam ederseniz, çerezlerin kullanımını kabul etmiş olursunuz.
Ousia Logo
Logout
Ousia CMS Loader