Sql Cümlesi

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
bgoktas
Kıdemli Üye
Mesajlar: 769
Kayıt: 27 Nis 2004 10:32
Konum: istanbul

Sql Cümlesi

Mesaj gönderen bgoktas »

Ib kullandığım projemde
Hareket table'ında 03.06.2004 tarihli kayıtlar var.

hareket table'ı;

sicilno varchar,
tarihsaat timestamp,
tarih timestamp,
saat timestamp

ben bu kayıtların aynısını 04.06.2004 tarihinede eklemek istiyorum.

şöyle bir sql yazdım

Kod: Tümünü seç

insert into hareket(sicilno,tarihsaat,tarih,saat,kapi,neden,gckod)
select (sicilno,'04.06.2004'+saat,'04.06.2004',saat,kapi,neden,gckod)
from hareket where tarih='03.06.2004'
herhalde yanlış oldu.
interbase de string birleştirme diye bir function var mı?,
tarihsaat alanı datadaki tarihin ve saatin birleşimidir. örneğin tarih:03.06.2004 , saat: 08.05 ise tarihsaat alanı 03.04.2004 08:05 olmalı.
Tabi ben 03.06.2004 'ün hareketlerini 04.06.2004'e aktarmak istediğimden tarih saat alanlarıda değişmeli...

Not:sorunu sql'de çözmeliyim, delphi veya database'de import-export'la değil...
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

firebird 1.5 ile gelen bir yenilik execute statement anahtar kelimeleri
yalnız bunu sp ler icinden kullanabiliyorsun.

asagıya Release Notesta gecen ornegi atıyorum

Kod: Tümünü seç

CREATE PROCEDURE EXECUTESTATEMENTEXAMPLE (
    TEXTFIELD VARCHAR(100),
    TABLENAME VARCHAR(100))
RETURNS (
    LINE VARCHAR(32000))
AS
DECLARE VARIABLE ONELINE VARCHAR(100);
BEGIN
  LINE = '';
  FOR EXECUTE STATEMENT
    'SELECT ' || TEXTFIELD || ' FROM ' || TABLENAME INTO :ONELINE
    DO
      IF (ONELINE IS NOT NULL) THEN
        LINE = LINE || ONELINE || ' ';
  SUSPEND;
END
tablenameparametresine herhangi bir tablo ismi
textfield parametresine de string bir alan ismi verip deneyebilirsin
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Re: Sql Cümlesi

Mesaj gönderen rsimsek »

bgoktas yazdı:

Kod: Tümünü seç

insert into hareket(sicilno,tarihsaat,tarih,saat,kapi,neden,gckod)
select (sicilno,'04.06.2004'+saat,'04.06.2004',saat,kapi,neden,gckod)
from hareket where tarih='03.06.2004'
select kısmını;

Kod: Tümünü seç

insert into hareket(sicilno,tarihsaat,tarih,saat,kapi,neden,gckod)
select sicilno,'04.06.2004 '||saat,'04.06.2004',saat,kapi,neden,gckod
from hareket where tarih='03.06.2004'
şeklinde verdiğin tarihten sonra bir boşluk ve || işaretleri ile birleştirme yap. SQL yazımında + yerine || (çift bar) kullanılır.
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

bgoktas yazdı:insert into hareket(sicilno,tarihsaat,tarih,saat,kapi,neden,gckod)
select (sicilno,'04.06.2004'+saat,'04.06.2004',saat,kapi,neden,gckod)
from hareket where tarih='03.06.2004'
fazladan parantezler var bu kodda.... string toplama isi de mumkun fakat sonucun belki de datetime tipine donusturlmesi gerekebilir yani
Cast('04.06.2004'+saat as datetime) gibi... Ama tabi saat alanı da string ise... yok eger o da time ise onu da stringe donusturup toplama yapılabilir...
yani

Kod: Tümünü seç

Cast('04.06.2004'+cast(saat as char(8)) as datetime)
gibi... Fakat bunlar tahmini kodlar olup bu yoldan deneme yapılmasını tavsiye niteliğindedir. Test ederek gondermedim... Mesela stirng olan tarih ile string olan zaman arasına bir bozluk belki bırakmamk gerekecektir ... vb....
* http://www.fahrettin.org Manzara Fotoğraflarım... :)
* http://delphiturkiye.gunduz.info Seminerler... ;)
* http://www.hakmar.com.tr Kalite bir haktır... 8)
bgoktas
Kıdemli Üye
Mesajlar: 769
Kayıt: 27 Nis 2004 10:32
Konum: istanbul

Mesaj gönderen bgoktas »

Recep Abi Allah razı olsun çok faydalı oldu. '

Kod: Tümünü seç

04.06.2004' || saat 

dediğimde istediğimi yapmış oluyorum.

Fahrettin abi söylediğiniz dönüştürme işlemlerini yapıp sonucu yazacağım...
bgoktas
Kıdemli Üye
Mesajlar: 769
Kayıt: 27 Nis 2004 10:32
Konum: istanbul

Mesaj gönderen bgoktas »

Fahrettin abi, sizin yazdığınız kod sybase'e has bir kodmu acaba bende çalışmıyor.

Ayrıca dediğiniz doğru, saat alanı timestamp olduğundan birleştirme hatalı oluyor...
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

him... evet hatirliyorum galiba..... interbase'de stirng toplama icin + işe yaramamıştı.... Sybase'den alışkanlık olarak kalmış ama galiba gene lsql standartı Recep Abi'nin dediği gibi || toplamak....
* http://www.fahrettin.org Manzara Fotoğraflarım... :)
* http://delphiturkiye.gunduz.info Seminerler... ;)
* http://www.hakmar.com.tr Kalite bir haktır... 8)
bgoktas
Kıdemli Üye
Mesajlar: 769
Kayıt: 27 Nis 2004 10:32
Konum: istanbul

Mesaj gönderen bgoktas »

Sorun halloldu şöyleki;


Kod: Tümünü seç

insert into hareket(sicilno,tarihsaat,tarih,saat,kapi,neden,gckod)
select sicilno,'04.06.2004 ' || extract (hour from saat) || ':' || extract (MINUTE from saat) ,'04.06.2004',saat,kapi,neden,gckod
from hareket where tarih='02.01.2004'
extract olayı bitirdi abiler.

Not:Extract, tarih ve saat alanlarından gün(day),ay(month),yıl(year),saat(hour),dakika(minute),saniye(second) gibi alanları kesip almaya yarıyor.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

cast la şu şekilde de yapabilirsin;

Kod: Tümünü seç

select cast(tarihi||' '||'12:15:00' as timestamp) from hareket
Fahrettin hocam FB de datetime yerine timestamp kullanılıyormuş... Ben de ihtiyaç olmadığı için hiç kullanmamışım :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
bgoktas
Kıdemli Üye
Mesajlar: 769
Kayıt: 27 Nis 2004 10:32
Konum: istanbul

Mesaj gönderen bgoktas »

rsimsek yazdı:cast la şu şekilde de yapabilirsin;

Kod: Tümünü seç

select cast(tarihi||' '||'12:15:00' as timestamp) from hareket
Fahrettin hocam FB de datetime yerine timestamp kullanılıyormuş... Ben de ihtiyaç olmadığı için hiç kullanmamışım :wink:
abi saat olarak yazdığınız alan databasede '12:15:00' şeklinde değilde şu şekilde '31.12.1899 12:15:00' şeklinde (timestamp olduğundan)
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

evet başlangıç değeri, (default yada after insertte) bir değer atamazsanız öyle yapıyor :?
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Cevapla