2 Kasım 2018 Cuma

Logo Tarih Zaman İşlemleri - SQL

Logo Zaman bilgisinin Logo veritabanına integer olarak aktarılması


Logo’da  zaman bilgisi bazı tablolarda integer alanlarda tutulmaktadır. Bu alanları doldurmak için aşağıdaki SQL fonksiyonunu kullanabilirsiniz. (Veya aynı kodu C# veya Delphi gibi yazılım tool’larında hazırlayabilirsiniz)
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

Örnek Kod:
— Örneğin saat 15:54:00 olduğunda sonuç integer olarak  255197184 gelir
select [dbo].[LG_TIMETOINT](15,54,00) as IntegerSaat

Logo için tarih bilgisinini datetime’a integer olarak çeviren fonksiyon.


CREATE FUNCTION fn_LogoTimetoSystemTime (@GELENDEGER INT)
RETURNS VARCHAR(8)
AS
BEGIN
DECLARE @SAAT VARCHAR(2), @DAKIKA VARCHAR(2), @SANIYE VARCHAR(2), @SONUC VARCHAR(8)
SELECT
@SAAT=RTRIM(CONVERT(char(20), ROUND(@GELENDEGER / 167772162))),
@DAKIKA=RTRIM(CONVERT(char(20), ROUND((@GELENDEGER – ROUND(@GELENDEGER / 167772162) * 16777216)/ 655362))),
@SANIYE=RTRIM(CONVERT(char(20), ROUND((@GELENDEGER – ROUND(@GELENDEGER / 167772162) * 16777216– ROUND((@GELENDEGER – ROUND(@GELENDEGER / 167772162) * 16777216) / 655362) * 65536) / 2562)))
SET @SAAT=CASE WHEN LEN(@SAAT)=1 THEN ‘0’+@SAAT ELSE @SAAT END 
SET @DAKIKA=CASE WHEN LEN(@DAKIKA)=1 THEN ‘0’+@DAKIKA ELSE @DAKIKA END 
SET @SANIYE=CASE WHEN LEN(@SANIYE)=1 THEN ‘0’+@SANIYE ELSE @SANIYE END
SET @SONUC= @SAAT + ‘:’ +@DAKIKA + ‘:’ + @SANIYE
RETURN @SONUC
END

Logo veritabanında integer olarak tutulan tarih bilgisininin datetime’a çeviren fonksiyon.

CREATE FUNCTION fn_LogoDatetoSystemDate (@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)/65536AS 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
Share:

0 yorum:

Yorum Gönder

Blog Arşivi