int to Date

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

int to Date

Mesaj gönderen pro_imaj »

Merhaba;

Arakdaşlar Veri tabanında integer olan bir alanı tarihe çevirdiğimde MSSQLde sadece tarihe çeviremediğimden saatede çeviriyor hal böyle olunca sonuç yanlış oluyor.

Kod: Tümünü seç

SELECT (cast(Tarih as datetime)) FROM FINSAT410.SPI
Bu şekilde yazdığımda aşağıdaki gibi bir sonuç alıyorum.
2005-11-21 00:00:00.000

Normade veri tabanındaki sayı
38675



Olması gereken
19.11.2005



Saygılarımla
Teşekkür ederim.

Not: Garip olan taraf date fonctionu kullanılamıyor ancak datetime kullanılıyor o zamanda sonuç yanlış oluyor.
En son pro_imaj tarafından 21 Kas 2005 05:18 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
Kullanıcı avatarı
mnt
Üye
Mesajlar: 57
Kayıt: 30 Eki 2005 12:58
Konum: Kocaeli

Mesaj gönderen mnt »

Denemedim ama olması lazım.

Kod: Tümünü seç

SELECT CONVERT(char(12), cast(Tarih as datetime) , 103) FROM ...
Mustafa
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Mesaj gönderen pro_imaj »

mnt yazdı:

Kod: Tümünü seç

SELECT CONVERT(char(12), cast(Tarih as datetime) , 103) FROM ...

Merhaba Cevabınız için Teşekkür ederim.

ama küçümk bir sorun var :idea:
Veri tabanındaki 38675 sayısını sizin cod ile derlediğimde 21/11/2005 sonucuna ulaşıyorum halbuki 19.11.2005 olması gerek. Bu Soruna farklı bir yaklaşım varmı acaba datetime fonctionu olmuyor. Date Fonctionunu neden kullanamıyorum acaba. :(

Saygılarımla
Teşekkür ederim.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

Merhaba,
Excell yazdı: Excel hesaplamalarda kullanılabilmeleri için tarihleri sıralı seri numaraları olarak saklamaktadır. Varsayılan olarak, 1 Ocak 1900'ün seri numarası 1'dir, bundan dolayı 1 Ocak 1900'den 39.448 gün sonra olması nedeniyle 1 Ocak 2008'in sayısı 39448'dir. Macintosh için Excel varsayılan olarak farklı bir tarih sistemi kullanmaktadır.
Delphi Help yazdı: Following are some examples of TDateTime values and their corresponding dates and times:

0 12/30/1899 12:00 am
2.75 1/1/1900 6:00 pm
-1.25 12/29/1899 6:00 am
35065 1/1/1996 12:00 am

Excell den ve delphi den 38675 değerini verince 19.11.2005 tarihini veriyor. Ama mssql de 21.11.2005 tarihini veriyor.
Excell de 0 rakamını girip başka bir alanı date yaptığınızda 00.01.1900
1 girince 01.01.1900 veriyor.
Delphide

Kod: Tümünü seç

procedure TForm1.Button2Click(Sender: TObject);
var
tarih:tdate;
begin
   tarih:=0;
   showmessage(datetostr(tarih));
end;
tarih 0 için 30.12.1899
1 için 31.12.1899
2 için 01.01.1900 değerini veriyor.

Bence excell 1 01.01.1900 ile başlar dediği halde delphideki gibi davranıyor.
mssql ise excell in yalancısı olup tarihi 1->01.01.1900 olarak alıyor.
O yüzden 2 gün fazla söylemiş oluyor. :lol: :lol: :lol:

Bu durumda bence siz çevirirken

Kod: Tümünü seç

SELECT CONVERT(char(12), cast(Tarih-2 as datetime) , 103) FROM ... 
şeklinde yapın.
Ama Getdate() fonksiyonunda öyle yapmıyor. Delphi ve Excell'deki gibi yapıyor.

Umarım başınızı ağrıtmamışımdır.

Kolay gelsin.
Kullanıcı avatarı
mnt
Üye
Mesajlar: 57
Kayıt: 30 Eki 2005 12:58
Konum: Kocaeli

Mesaj gönderen mnt »

Merhaba Cevabınız için Teşekkür ederim.
Birşey değil, sağolsun @ofenX te açıklamalarda bulunmuş, ama merak ettiğim için soruyorum, neden tarihi integer olarak tutuyorsunuz ?
Mustafa
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Mesaj gönderen pro_imaj »

ofenX yazdı:Merhaba,
Umarım başınızı ağrıtmamışımdır.
@ofenX Hocam beni çok mahçup ettiniz.:oops: Asıl ben size eziyet ettim. :oops: Benim için araştırdınız excel, delphi, MSSQL demeden Allah (cc) sizden razı olsun. Tekrar tekrar teşekkür ederim Yardımlarınız ve ince düşünceleriniz için.

Kod: Tümünü seç

SELECT CONVERT(char(12), cast(Tarih-2 as datetime) , 103) FROM ... 
Vermiş olduğunuz bu son kod ile sorunum çözüldü.

Not: Benim asıl merak etiğim MSSQL <> Excel, Access
Date fonctionunu neden kullanmıyoruz MSSQL de


Saygılarımla
Teşekkürler.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

Merhaba,
pro_imaj yazdı: Not: Benim asıl merak etiğim MSSQL <> Excel, Access
Date fonctionunu neden kullanmıyoruz MSSQL de
bu sorunuzu tam anlayamadım. Ama şöyle soruyorsanız. "Neden delphideki date() fonksiyonu yerine mssql de getdate() kullanılıyor " diye soruyorsanız.
Sanırım getdate() serverdaki tarihi, date() ise şu an kullandığınız bilgisayardaki tarihi veriyor.
Sorunuzu tam anlamamış olabilirim.

Kolay gelsin.
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Mesaj gönderen pro_imaj »

Merhaba @ofenX;

Sorum aslında MSSQL Serverdaki sql kodu ile msexceldeki arka planda çalışan sql kodları ve functionları neden uyuşmadığıydı. Hatta bunla ilgili bir sorum olmuştu. viewtopic.php?t=12365

Kolay gelsin.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
Cevapla