Anasayfa > SQL Genel Bilgiler ve Eğitim bilgileri, T-SQL Komutları > T-SQL ile Dakikayı Metne Çevirmek

T-SQL ile Dakikayı Metne Çevirmek

Bazı işleri veritabanına yaptırmak uygulamalara zaman kazandırabiliyor… Veriler üzerinde süre hesaplamak da bunların arasında sayılabilir, çünkü uygulama üzerinde süre hesaplamaktansa veritabanı tablosunu çekerken sürenin hesaplanmış olarak gelmesi hem hız, hem de performans açısından daha kârlıdır. Bununla birlikte bu tür işlere giriştiğinizde sunucunuzun da güçlü olması sıkıntılarınızı azaltabilir…

Aşağıda tanıtacağım kod, dakika (tamsayı) cinsinden verilen bir süreyi “Yıl + Ay + Gün + Saat + Dakika” cinsinden yazabilmenizi sağlıyor. Bir nevi dakikayı okunabilir bir metne çeviriyor. Kıytırık bir iş gibi gözükebilir fakat bu tür küçük şeylerle uğraşmak büyük sistemlerde kodların okunabilirliğini ve hataların çabuk giderilmesini sağlaması açısından gayet faydalıdır.

Şu an kullanmakta olduğumuz takvim konusundaki bilgiyi vikipedi‘den edinebilirsiniz. Gevelemeden koda geçelim;

set ANSI_NULLSON
set QUOTED_IDENTIFIERON

GO

/********************************************************************************\
|* Dakika cinsinden süreyi metne çevirir.
\********************************************************************************/
ALTER FUNCTION [dbo].[FN_STR_SureYaz] ( @Parametre INT)
RETURNS VARCHAR(MAX)
AS
BEGIN
DECLARE @Sonuc                    VARCHAR(MAX)
,                   @ToplamDakika             INT
,                   @ArtanDakika                INT
,                   @ToplamSaat                 INT
,                   @ArtanSaat                    INT
,                   @ToplamGun                 INT
,                   @ArtanGun                    INT
,                   @ToplamAy                   INT
,                   @ArtanAy                      INT
,                   @ToplamYil                   INT
SELECT   @ToplamDakika = ISNULL (@Parametre, 0)/* Tutarlılık için küçük bir önlem🙂 */
,                 @ArtanDakika = @ToplamDakika % 60
,                 @ToplamSaat =(@ToplamDakika @ArtanDakika)/ 60
,                 @ArtanSaat = @ToplamSaat % 24
,                 @ToplamGun =(@ToplamSaat @ArtanSaat)/ 24
,                 @ArtanGun = @ToplamGun % 30.436875
,                 @ToplamAy =(@ToplamGun @ArtanGun)/ 30.436875
,                 @ArtanAy = @ToplamAy % 12
,                 @ToplamYil =(@ToplamAy @ArtanAy)/ 12
SELECT
@Sonuc =CASE WHEN @Parametre<=0 THEN ‘yok’
                       ELSE CASE WHEN @ToplamYil > 0 THEN CAST(@ToplamYil AS VARCHAR)+‘ yl ‘     ELSE ”  END
                        +  CASEWHEN @ArtanAy > 0     THEN CAST(@ArtanAy    AS VARCHAR)+‘ ay ‘    ELSE END
                        +  CASEWHEN @ArtanGun >THEN CAST(@ArtanGun  AS VARCHAR)+‘ gn ‘    ELSE END
                        +  CASEWHEN @ArtanSaat > 0 THEN CAST(@ArtanSaat  AS VARCHAR)+‘ saat ‘ ELSE END

/* Mesela 1 Ocak 1753’den şimdiye kadar olan süreyi yazdıralım */

SELECT dbo.FN_STR_SureYaz (DATEDIFF(minute,‘17530101’,GETDATE())) AS [Geçen Süre]

/* Veya belli iki tarih arasındaki süreyi yazdıralım */

SELECT dbo.FN_STR_SureYaz (DATEDIFF(minute,‘20090101’,‘20091010’)) AS [Geçen Süre]

Geçen Süre
———————————
256 yıl 7 ay 22 gün 14 saat 12 dk
(1 row(s) affected)
 
Geçen Süre
———————————
9 ay 7 gün
(1 row(s) affected)
  1. Henüz yorum yapılmamış.
  1. No trackbacks yet.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Connecting to %s

%d blogcu bunu beğendi: