Forum
Merhabalar.
SQL2005 de bulunan veritabanımızdan çalışan programımıza saat formatında kayıt yapıyoruz. Fakat bu saat formatı veritabanında sayı formatında yazmaktadır. Sqlinfo ile bu tablodaki sayıyı tekrar saat formatına çevirip rapora yansıtmam gerekiyor. Bununla ilgili önerilerinizi bekliyorum. Teşekkürler.
Kolay gelsin.
merhaba
sayı formatından bir örnek verebilirmisiniz.
Şuanki field 'daki deger nasıl?
Saat formatının veritabanında illa sayı olarak tutulması zorunlu mu?
http://www.mssqltips.com/tip.asp?tip=1744 adresini inceleyebilirsiniz.
merhaba
sayı formatından bir örnek verebilirmisiniz.
Şuanki field 'daki deger nasıl?
16:57:04 giriyorum veritabanına 272172053 olarak kaydediyor.
Saat formatının veritabanında illa sayı olarak tutulması zorunlu mu?
Paket program kullandığımız için programdan girilen saat veritabanına otomatik sayı formatında atıyor. Yani veritabanına biz müdahale edemiyoruz.
http://www.mssqltips.com/tip.asp?tip=1744 adresini inceleyebilirsiniz.
Gönderilen dökümanı inceledim. Burada saat ile ilgili kolonların ALTER edilmesiyle ilgili örnekler. Fakat ben direk veriyi sqlinfo ile çektikten sonra saat formatına dönüştürmek istiyorum. Yani sqlinfoda sorunum yok ama veritabanından geldiği için bilgi sayı formatında atıyor. Anlatabilmişimdir umarım. Teşekkürler.
http://www.sqlservercentral.com/Forums/Topic656902-338-1.aspx#bm656914
Burayı inceleyebilirsiniz ancak o tarihin veritabanına hangi algoritmada yazıldığını bilmeden decode işlemi kolay değil. Girilen saat verisinin saniyelerini toplayıp sayı olarak yazmak gibi basit bir yöntem olsa decode kodu yazılabilir ama öyle de değil gibi görünüyor. Belki milisaniye bilgisi de kaydediliyordur. Ona dikkat ettiniz mi? Bir de dönüşüm sql server tarafında sp'lerle yapılıyor olabilir bir ihtimal; orayı gözden geçirmek gerekebilir. En sağlıklı çözüm yazılım üreticisi ile görüşüp dönüşüm işleminin hangi algoritma ile yapıldığını sormak olacaktır.
Yazılımı yapan kişilerle görüştüm bana aşağıdaki sorguyu verdiler ama bu formüldeki rakamlar nerden geliyor anlayamıyorum. Anlayan varsa yazabilirmi lütfen?
--------------------------
ALTER FUNCTION [dbo].[LG_INTTOTIME](@LDATE INT)
RETURNS VARCHAR(12)
AS
BEGIN
DECLARE @TIME DATETIME,
@HH INT,
@MM INT,
@SS INT,
@TIMESTR VARCHAR(12),
@RETSTR VARCHAR(12)
SELECT @HH = (@LDATE-(@LDATE%65536))/65536/256
SELECT @MM = ((@LDATE-(@LDATE%65536))/65536-((@LDATE-
(@LDATE%65536))/65536/256)*256)
SELECT @SS = (((@LDATE%65536)-((@LDATE%65536)%256))/256)
SELECT @TIMESTR = CAST(@HH AS VARCHAR(2))+':'+
CAST(@MM AS VARCHAR(2))+':'+
CAST(@SS AS VARCHAR(2))
SELECT @TIME = CONVERT(DATETIME,@TIMESTR,101)
SELECT @RETSTR = CONVERT(VARCHAR,@TIME,108)
RETURN(@RETSTR)
END
SELECT (DBO.LG_INTTOTIME(256))
--------------------------
buna göre ;
Saat için: (272172053-(272172053*0.000065536))/65536/256 =16
Dakika için: ((272172053-(272172053*0.000065536))/65536-((272172053-(272172053*0.000065536))/65536/256)*256) Yanlış geliyor.
vb.
Merhaba,
SELECT
(DBO.LG_INTTOTIME(272172053)) sorgusu 16:57:04 sonucunu yani doğru sonucu veriyor, bir sorun yok.
manuel hesaplarken % işlemini bölme olarak kullanmışsınız oysa bu "mod" dur, kalanı verir.Ör: 4%3 =1 dir.
65536 sayısı 2 üzeri 16 dır.
kolay gelsin..
Fonksiyon tam Orhan'lıkmış zaten
Merhaba,
SELECT
(DBO.LG_INTTOTIME(272172053)) sorgusu 16:57:04 sonucunu yani doğru sonucu veriyor, bir sorun yok.
manuel hesaplarken % işlemini bölme olarak kullanmışsınız oysa bu "mod" dur, kalanı verir.Ör: 4%3 =1 dir.
65536 sayısı 2 üzeri 16 dır.kolay gelsin..
Valla ben yine anlamadım. Başka alanlarda kullanmak üzere manuel hesaplamam yapmam gerekiyor. Mesela:
272172053%65536=? (Kaç olmalı)
272172053 sayısının 65536 sayısına bölümünden kalan kaç ise onu verir yani 1045 verir.