SQLServer da ters tarih format

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ı
akgun83
Üye
Mesajlar: 106
Kayıt: 26 Eyl 2003 11:34

SQLServer da ters tarih format

Mesaj gönderen akgun83 »

Selam,
SQL Server da bi sorunum var. tarih formatı gün, ay, yıl olarak değilde ay,gün,yıl olarak ayarlı. dolayısıyla SQL cümlelerinde hata alıyorum
örneğin

Kod: Tümünü seç

select * from UBFUGOREV where VERILISTAR='14.06.2004'
sql cümlesinde

Kod: Tümünü seç

The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.
hatasını alıyorum bunu nasıl ayarlayabilirim. MSSQl2000+Win2000Server kullanıyorum ve bölgesel ayarlarda ayarlı.
Teşkkürler. Kolay Gelsin.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7586
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

FormatDateTime ile istediğin formata dönüştürebilirsin. Sitede makaleler'den Tarih ve saat fonksiyonlarına bir bak.

Kolay gelsin.
Kullanıcı avatarı
akgun83
Üye
Mesajlar: 106
Kayıt: 26 Eyl 2003 11:34

Mesaj gönderen akgun83 »

cevap için teşekkürler yalnız bu ayarı SQL Server da yapmam lazım. yani Query analyzer da sqlleri çalıştırırken sorun çıkarmaması lazım. delphi tarafından gayet tabi halledilebilir.
kolay gelsin.
onaydin

Mesaj gönderen onaydin »

Kod: Tümünü seç

SELECT DATEFORMAT( '1989-01-01', 'Mmm dd, yyyy' )
Dönen değer Jan 01, 1989.

yy  Two digit year  
yyyy  Four digit year  
mm  Two digit month, or two digit minutes if following a colon(as in hh:mm)  
mmm[m...]  Character short form for months—as many characters as there are "m"s  
d  Single digit day of week, (0 = Sunday, 6 = Saturday)  
dd  Two digit day of month  
ddd[d...]  Character short form for day of the week  
hh  Two digit hours  
nn  Two digit minutes  
ss[.ss..]  Seconds and parts of a second  
aa  AM or PM (12 hour clock)  
pp  PM if needed (12 hour clock)  
jjj  Day of the year, from 1 to 366  


Kod: Tümünü seç

 .. where VERILISTAR= DATEFORMAT( '1989-01-01', 'mm-dd-yyyy')
msSql için dateformat benzeri bir fonksiyonu kullanmanız gerekiyor (belki olduğu gibi geçerlidir).
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2247
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Selamlar,

Kod: Tümünü seç

  SET DATEFORMAT ymd
yada

Kod: Tümünü seç

  SET DATEFORMAT mdy
yada

Kod: Tümünü seç

  SET DATEFORMAT dmy
gibi kombine ederek kurulan connection'a ait date formatı belirleyebiliyorsunuz.

Ayrıca (sanırım kurulum aşamasında veya server makinanın DateTime setting'ine göre server kendi date formatını ayarlıyor)

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Bu mesele benim de başıma bela oldu....

SQL server üzerinde çalışan programımı şimdi başka bir SQL servera da bağlayarak kullanıyoruz. Birincisi SQL server 2000 ikincisi ise 2005

Problemim ise şu : Program gerek server üzerindeki stored procedurelere parametre gonderirken gerekse kendi icinde runtime da SQL cümlesi oluştururken yyyymmdd formatina gore tarihleri kullanıyor... Oysa şimdi 2005 versiyonunda bu format işe yaramıyor... Çünkü yyyyddmm formatinda işlemleri yapıyor... SQL Server Management Studio üzerinde

Kod: Tümünü seç

SET DATEFORMAT ymd
komutunu çalıştırınca kapatıp tekrar açana kadar buradan SP yi yyyymmdd formatında çağırabiliyorum... Yani istediğim oluyor... Lakin bu sadece o session için geçerli olduğu gibi delphi tarafından bunu da başaramadım... SP mi çağırmadan once aynı komutu

Kod: Tümünü seç

SET DATEFORMAT ymd
çalıştırmama rağmen delphi üzerinden yaptığım bağlantılarda databsein istediğim tarih formatına uygun çalışmasını başaramadım.... SQL server 2005 de tarih formatını kalıcı olarak yyyymmdd nasıl yapabilirim? Bu arada bu problem SQL server 2000 tarafında yok... Orası hep yyyymmdd formatında çalışıyor zaten... SQL server üzerinde boyle bir parametre goremedim... Her iki makinanin da bolgesel ayarlarındaki tarih bolumu aynı...
Ya da delphi tarafından yaptığım bağlantılarda tarih formatının yyyymmdd olarak işlem yapılmasını nasıl temin edebilirim...

Kolay gelsin....
* http://www.fahrettin.org Manzara Fotoğraflarım... :)
* http://delphiturkiye.gunduz.info Seminerler... ;)
* http://www.hakmar.com.tr Kalite bir haktır... 8)
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Meseleyi çözdüm.....
SP lerdeki tarih alanlarına parametre olarak '20070530' şeklidne parametre gönderildiğinde yani dateseperator kullanılmadığında yyyymmdd olarak parametre geçebiliyorum... Ama eğer dateseperator kullanırsam yyyy.dd.mm olarak kabul ediyor ve kalıcı olarak bu durumu değiştiremedim... En azından şimdilik bulamadım bunu...

Kolay gelsin....
* http://www.fahrettin.org Manzara Fotoğraflarım... :)
* http://delphiturkiye.gunduz.info Seminerler... ;)
* http://www.hakmar.com.tr Kalite bir haktır... 8)
SQLinvader
Üye
Mesajlar: 1
Kayıt: 01 Nis 2008 03:53

Re: SQLServer da ters tarih format

Mesaj gönderen SQLinvader »

Öncelikle kullandığın Tabloda zaman/tarih öngörü kriterinin ne olduğunu bilmen lazım.
Bilmiyorsan yine de tarihi/zamanı belirten bir sorguda bunu SQL Srv Ent. Managerda kolayca
görürsün.. Misalen sorguda tabloda DATE_BAKALIM sütunu tarih girdilerini veriyor olsun.

buraya MS SQL SRV ENT. penceresinde Criteria olarak 21.03.2008 girdiğinde alt pencere kanadında
metine dönüşmüş sorguda bu tabloya göre varsayılan formatın kendi açığa çıkar.

WHERE (DATE_BAKALIM = CONVERT(DATETIME, '2008-03-21 00:00:00', 102) ->göreceksin. 102 burada formattır.
Tablonun (aynı veri tabanı içinde her tabloya farklı tarih formatı verilmiş olabilir) yapısına göre
sana göre "ters" olan tarihi dilediğince kendi program veya MS SQL sorgunda işleyebilirsin 102 veya 103 türkiyede
en çok tercih ettiğimiz oluyor.

Yukarıdaki anlatılana rağmen düzeltemiyorsan veya başka bir bilgisayarda düzgün sende "ters" çıkıyorsa hala
şu noktayı kontrol etmende büyük fayda var :

---> Denetim Masası
---> Bölge ve Dil Seçenekleri
---> Bölgesel Seçenekler
---> Özelleştir
---> Tarih = Burada Tarih ayracı . (nokta) ve tarih formatı gg.aa.yyyy olarak girilmeli. Yukarıda
102 veya 103 formatına rağmen "ters" görünüyorsa burada düzeltme gereklidir.

Ben bu tip bir düzeltmeyi XP Pro SP1 den SP2 ye yeni geçmiş ve SP2'si yenilenmiş bilgisayarlarda gerçekleştirdim.

*Bazen aylarca aradağımız sorunun cevabı burnumuzun dibindedir de
kendi büyüklüğümüzden etrafımızdaki "küçük" insanları göremeyiz.
Kullanıcı avatarı
modigant
Üye
Mesajlar: 40
Kayıt: 08 Mar 2008 01:35

Re: SQLServer da ters tarih format

Mesaj gönderen modigant »

Sql servere istersen parametreyi göndermeden önce delphide tarih formatını düzelterekte bu sorununu çözebilirsin. Aynısı benimde başıma geldi. Sorunu delphiden gönderirken formatdatetime(MM.dd.yyyy) olarak gönderince sorunsuz çalıştı. Kullanımını siteden araştırıp bulabilirsin.
Kolay gelsin..
Sular yükselince, balıklar karıncaları yer...Sular çekilince de karıncalar balıkları...Kimse bugünkü üstünlüğüne ve gücüne güvenmemelidir....
Çünkü kimin kimi yiyeceğine.. "Suyun Akışı Karar Verir..."
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3077
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: SQLServer da ters tarih format

Mesaj gönderen sabanakman »

Hiç uğraşmam, ADOConnection bileşenlerimin afterconnect olayına

Kod: Tümünü seç

procedure TForm1.ADOConnection1AfterConnect(Sender: TObject);
begin
  if Sender is TADOConnection then
   TADOConnection(Sender).Execute('set dateformat dmy');
end;
yazar geçerim ve o connection'a bağlanan tüm sorgularımda gün.ay.yıl formatında da sorgularımı yazarım.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
supervisor
Üye
Mesajlar: 50
Kayıt: 07 Kas 2005 10:38
Konum: Turgutlu

Re: SQLServer da ters tarih format

Mesaj gönderen supervisor »

Kod: Tümünü seç

select * from UBFUGOREV where VERILISTAR='14.06.2004'
sql cümlesinde

Kod: Tümünü seç

 
Kod:
The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.
Aynı sorun ile bende karşılaştım. 'günayyıl' olarak iki tarih arası rapor istediğimde farklı tarihler geliyordu.Sorgulamayı 'aygünyıl' olarak değiştirdim.Sonuca ulaştım.Bi hayli uğraşmıştım :oops:
Cevapla