1. Anasayfa
  2. Logo Raporlama

Logo Tarih ve Zaman Fonksiyonları

Logo Tarih ve Zaman Fonksiyonları
logo ftime datetime
0

Logo Go3 ve Logo Tiger3 veritabanlarına aşina olan veya SQL Raporlama ile uğraşan insanlar, logodaki bazı tarih ve zamansal bilgilerin veritabanındaki karşılığının integer olarak tutulduğunu görmüşlerdir. Bu yazıda integer değerlerin nasıl tarih ve zaman formatına çevrildiğini anlatacağım.

Logo TIME ve FTIME alanları

Logo veritabanındaki TIME ve FTIME alanları genellikle zaman bilgisini tutar. Yani burada işlem yapılan tarih değil, o tarihe ait zaman (saat:dakika:saniye) tutulur. Buradaki integer değerin time formatındaki karşılığını bulmak için aşağıdaki fonksiyon kullanılır.

CREATE FUNCTION [dbo].[LG_TIMETOINT](@HH INT,@MM INT,@SS INT)
RETURNS INT
AS
BEGIN
DECLARE @TIME INT
SELECT @TIME = (@HH*65536*256+@MM*65536+@SS*256)
RETURN(@TIME)
END

Bu işlemin tersi ise, yani saat:dakika:saniye formatındaki bir değerin logo time formatındaki integer değerine ulaşmak için aşağıdaki fonksiyon kullanılır.

CREATE FUNCTION [dbo].[LG_INTTOTIME](@TIME INT)
RETURNS VARCHAR(8)
AS
BEGIN
DECLARE @HH INT
DECLARE @MM INT
DECLARE @SS INT
SELECT @HH = @TIME/65536/256
SELECT @MM = (@TIME/65536) - (@HH*256)
SELECT @SS = (@TIME/256) - (@HH*65536) - (@MM*256)
RETURN (RIGHT('0'+CAST(@HH AS VARCHAR(2)),2)+':'+RIGHT('0'+CAST(@MM AS VARCHAR(2)),2)+':'+RIGHT('0'+CAST(@SS AS VARCHAR(2)),2))
END
GO

Logo DATE alanları

Yukarıdaki açıklama ile paralel bir şekilde, logo veritabanındaki bazı date alanlar, integer tipinde tutulur. Buradaki integer değerin date karşılığını görmek için aşağıdaki fonksiyon kullanılır.

CREATE FUNCTION [dbo].[LG_INTTODATE] (@DEGER INT)
RETURNS datetime
AS
BEGIN

DECLARE @GUN VARCHAR(2), @AY VARCHAR(2), @YIL VARCHAR(4)
DECLARE @SONUC datetime

SELECT
@GUN=CAST((CONVERT(INT,CONVERT(BINARY,@DEGER,2),0)-(CONVERT(INT,CONVERT(BINARY,@DEGER,2),0)/256*256)) AS VARCHAR(3))
SELECT
@AY=CAST(((CONVERT(INT,CONVERT(BINARY,@DEGER,2),0)-(65536*(CONVERT(INT,CONVERT(BINARY,@DEGER,2),0)/65536)))-(CONVERT(INT,CONVERT(BINARY,@DEGER,2),0)-(CONVERT(INT,CONVERT(BINARY,@DEGER,2),0)/256*256)))/256 AS VARCHAR(3))
SELECT
@YIL=CAST((CONVERT(INT,CONVERT(BINARY,@DEGER,2),0)/65536) AS VARCHAR(6))

SET @GUN=CASE WHEN LEN(@GUN)<2 THEN '0'+@GUN ELSE @GUN END
SET @AY=CASE WHEN LEN(@AY)<2 THEN '0'+@AY ELSE @AY END

SONUC:
IF @DEGER<>0
BEGIN
SET @SONUC=CONVERT(DATETIME, @YIL + '-' + @AY + '-' + @GUN + ' 00:00:00', 102)
END
IF @DEGER=0
SET @SONUC= NULL

RETURN @SONUC
END
GO

Bu işlemin tersi ise, yani datetime şeklindeki bir verinin integer karşılığını bulmak için de aşağıdaki fonksiyon kullanılır.

CREATE FUNCTION [dbo].[LG_DATETOINT] (@date DATETIME)
RETURNS INT
AS
BEGIN

DECLARE @GUN INT, @AY INT, @YIL INT
DECLARE @SONUC INT

SET @YIL = YEAR(@date)
SET @AY = MONTH(@date)
SET @GUN = DAY(@date)

SET @SONUC = (@YIL * 65536) + (@AY * 256) + @GUN

IF @SONUC = 0
SET @SONUC = NULL

RETURN @SONUC
END
GO

Fonksiyonların kullanımı ve örnek uygulamalar için aşağıdaki videoyu izleyebilir, bu tarz videolardan haberdar olmak için kanalıma abone olabilirsiniz.

Bu Yazıya Tepkiniz Ne Oldu?
  • 0
    be_endim
    Beğendim
  • 0
    alk_l_yorum
    Alkışlıyorum
  • 0
    e_lendim
    Eğlendim
  • 0
    d_nceliyim
    Düşünceliyim
  • 0
    _rendim
    İğrendim
  • 0
    _z_ld_m
    Üzüldüm
  • 0
    _ok_k_zd_m
    Çok Kızdım

Logo destek, logo go3, logo tiger3, logo muhasebe, logo go3 eğitim, logo tiger eğitim, logo connect, logo kural yazma, logo connect kural, logo sql, logo raporlama, logo rapor tasarımı, logo sqlinfo

Yazarın Profili
İlginizi Çekebilir
logo-amortisman

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir