Firebird'de coalesce sorunsalı.

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Firebird'de coalesce sorunsalı.

Mesaj gönderen fduman »

Firebird v1.5.2'de rastladığım ilginç birşeyi paylaşmak ve sizlere neden olabilir sormak istedim.

tabloda BASLANGIC adında TIMESTAMP türü bir alanım var.

Sorguda "select coalesce(BASLANGIC, '08.02.2005')" dersem eğer sonuç acaip bir tarih formatında geri dönüyor. Şöyle: 2005-02-09 08:00:00.0000 .

Normalde timestamp alanlarım 09.02.2005 08:00:00 şeklinde dönüyor. Neden coalesce, timestamp dönüş formatıyla bu şekilde oynuyor ve beni dönen değeri cast yapmaya zorluyor anlam vermiş değilim. Dökümanlarda bununla ilgili herhangi birşey bulamadım. Bu şekilde dönmesi eğer değeri karşılaştırmada kullanırsam, karşılaştırma sonucunun yanlış çıkmasına neden oluyor. Mesela başka bir timestamp veri ile karşılaştırırsam.

Dökümanın söylediği şu: coalesce, BASLANGIC alanı null değil ise dönen alanı BASLANGIC yapar, NULL ise '08.02.2005' yapar. (Kolay açıklamak için kullandığım parametreleri yazdım)

Yani diyeceğim şu ki null değilse aynı değeri falan döndürmüyor bu coalesce. sizce bir bug olabilir mi?

Bu arada bunu şöyle çözdüm:
cast(coalesce(BASLANGIC, '08.02.2005') as timestamp)

bu şekilde istediğim formatta gelmekle birlikte bu değeri karşılaştırmada kullanırsam da problem yaratmıyor.
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Bu hata Firebird bug listesine eklenmiş bile. Ancak halen bunun bir bug olup olmadığı geliştirilerce tartışılıyor.

Buradan ulaşabilirsiniz:
http://sourceforge.net/tracker/index.ph ... tid=109028

Başınıza geldiğinde coalesce'in string mantığında çalıştığını unutmayın ve değer karşılaştırmalarında eğer değerler timestamp ise dönen değeri cast edin.
Cevapla