Gün + ay + yil üc ayrı word ise

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ikut

Gün + ay + yil üc ayrı word ise

Mesaj gönderen ikut »

Merhaba
Bir vt deki sql den kayıt sırgulamam gerekiyor.

sorun şu bu vt de tarihler üç ayrı integer tipinde. üç ayrı değişken yani.... diğer vt de 20070301 gibi bir dizi şeklinde. 2. vt de sorun yok. ancak 2. vtdeki tarihi baz alıp 1. vtdeki aynı tarihe gitmem lazım.

Sql yazarken concat yapsam , 1. vt de örnein mart ayı 03 değilde 3 olarak kayıtlı.
tarihim 200731 gibi bir değer üretiyor.

VT DB2. üzerinde ikiside. Bu çevrimleri nasıl yaparım.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

1. vtde bir şekilde bir yerde gösteriliyordur.
Sanırım onun nasıl gösterildiğine ulaşabilirsin(program dll )karşılaştırabilirsin
Yoksa data yı çevirmen lazım diye düşünüyorum.

Veya alan uzunluğu ile yola çıkarak 200731 şeklinde ise
bunu bölerek
yani uzunluk =6 ise
soldan 4 al /
parça al 1 /
parça al 1
şeklinde fonk oluşturarak çıkan sonucu karşılaştırabilirsin ama
2007121 böle bir değerde ay 1 mi 12 mi, gün 1 mi 21 mi onu anlayamazsın
Karışık bir olay
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
ikut

Mesaj gönderen ikut »

conari yazdı:1. vtde bir şekilde bir yerde gösteriliyordur.
Sanırım onun nasıl gösterildiğine ulaşabilirsin(program dll )karşılaştırabilirsin
Yoksa data yı çevirmen lazım diye düşünüyorum.

Veya alan uzunluğu ile yola çıkarak 200731 şeklinde ise
bunu bölerek
yani uzunluk =6 ise
soldan 4 al /
parça al 1 /
parça al 1
şeklinde fonk oluşturarak çıkan sonucu karşılaştırabilirsin ama
2007121 böle bir değerde ay 1 mi 12 mi, gün 1 mi 21 mi onu anlayamazsın
Karışık bir olay
Dediğim gibi birinde string 8 diğerinde ise gun, ay , yil integer olarak saklaniyor vt de.
bgoktas
Kıdemli Üye
Mesajlar: 769
Kayıt: 27 Nis 2004 10:32
Konum: istanbul

Mesaj gönderen bgoktas »

mesela

Kod: Tümünü seç

select yilstr=cast(yil as varchar),
          aystr=case when length(cast(ay as varchar))=1 then '0'||cast(ay as varchar)
                        when length(cast(ay as varchar))=2 then cast(ay as varchar),
          gunstr=case when length(cast(gun as varchar))=1 then '0'||cast(gun as varchar)
                        when length(cast(gun as varchar))=2 then cast(gun as varchar) 
from tablo
şeklinde bir sorguyla veriyi düzeltip alabilirsin. Daha sonra view haline getirip alanları birleştirip tekrar word'e dönüştürebilirsin.

Kolay Gelsin
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
bence en kısa yol

Kod: Tümünü seç

tarih:=(yıl*10000)+(ay*100)+gun
sql e de sen dökersin artık :wink:
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
bgoktas
Kıdemli Üye
Mesajlar: 769
Kayıt: 27 Nis 2004 10:32
Konum: istanbul

Mesaj gönderen bgoktas »

Vallahi süpermiş bu yol :D
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

Ben anlayamadım Tarih i bulmak için Sayıya çeviriyoruz galiba
Excel mantıgındaki gibi mi?

@İkut
Pardon ben vt1 de yıl ay gün bu alanlar tek bir field da birleşik yazılı diye düşünmüştüm.
ayrı ayrı ise bunları birleştirmek basit değilmi?
birleştirirken de

Kod: Tümünü seç

i :integer;
y:string;
begin
i:=lenght(field.value)
if i =1 then
y:='0'+inttostr(field.value)
gibi bir kod ile 8 haneye getirebilirsin. Yine yanlış anlamadı isem.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
ikut

Mesaj gönderen ikut »

aslangeri yazdı:s.a.
bence en kısa yol

Kod: Tümünü seç

tarih:=(yıl*10000)+(ay*100)+gun
sql e de sen dökersin artık :wink:
kolay gelsin.
sayın bu dediğini daha önce denemiştim.

veriler as400 de duruyor ve ben where tarih > yada .= gibi bir koşul verdiğimde odbc driver hata veriyor. sorun burada ...
ikut

Mesaj gönderen ikut »

conari yazdı:Ben anlayamadım Tarih i bulmak için Sayıya çeviriyoruz galiba
Excel mantıgındaki gibi mi?

@İkut
Pardon ben vt1 de yıl ay gün bu alanlar tek bir field da birleşik yazılı diye düşünmüştüm.
ayrı ayrı ise bunları birleştirmek basit değilmi?
birleştirirken de

Kod: Tümünü seç

i :integer;
y:string;
begin
i:=lenght(field.value)
if i =1 then
y:='0'+inttostr(field.value)
gibi bir kod ile 8 haneye getirebilirsin. Yine yanlış anlamadı isem.
Hocam bu dediğin delphi tarafında mümkün. ben bunu sql tarafında yapmak istiyorum. böylece bana sadece bir sonuç kümesi dönecek..
ikut

Mesaj gönderen ikut »

bgoktas yazdı:mesela

Kod: Tümünü seç

select yilstr=cast(yil as varchar),
          aystr=case when length(cast(ay as varchar))=1 then '0'||cast(ay as varchar)
                        when length(cast(ay as varchar))=2 then cast(ay as varchar),
          gunstr=case when length(cast(gun as varchar))=1 then '0'||cast(gun as varchar)
                        when length(cast(gun as varchar))=2 then cast(gun as varchar) 
from tablo
şeklinde bir sorguyla veriyi düzeltip alabilirsin. Daha sonra view haline getirip alanları birleştirip tekrar word'e dönüştürebilirsin.

Kolay Gelsin
DB2 sql de sorun verdi. modifiye vs ettim ama yemedi. delirtecek beni bu kod
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
iyide arkadaşım senin tarih tipinde bir alanın yok o yüzden karşılaştırmaları integer olarak yapacaksın.
dediğim şekilde çarptığın zaman integer tarihi elde edebiliyorsun (öyle değilmi?)
gün,ay,yıl şeklinde ayrı tutulan db ye calc alan ekleyip karşılaştırmalarını o alana göre yapabilirsin(kullandığın vt de calc alan varmı bilmiyorum)
birde verdiği hata mesajını ve senin kullanıdğın kodları gönderirsen belki bişeyler çıkartabiliriz.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
bgoktas
Kıdemli Üye
Mesajlar: 769
Kayıt: 27 Nis 2004 10:32
Konum: istanbul

Mesaj gönderen bgoktas »

ikut yazdı:
bgoktas yazdı:mesela

Kod: Tümünü seç

select yilstr=cast(yil as varchar),
          aystr=case when length(cast(ay as varchar))=1 then '0'||cast(ay as varchar)
                        when length(cast(ay as varchar))=2 then cast(ay as varchar),
          gunstr=case when length(cast(gun as varchar))=1 then '0'||cast(gun as varchar)
                        when length(cast(gun as varchar))=2 then cast(gun as varchar) 
from tablo
şeklinde bir sorguyla veriyi düzeltip alabilirsin. Daha sonra view haline getirip alanları birleştirip tekrar word'e dönüştürebilirsin.

Kolay Gelsin
DB2 sql de sorun verdi. modifiye vs ettim ama yemedi. delirtecek beni bu kod
Db2'da case in kullanımı benim yazdığım gibi olmayabilir. helpinden bakabilirsin. aynı şekilde cast 'da böyle kullanılmıyor olabilir. Sql server'da sorunsuz çalışıyor bu kod
ikut

Mesaj gönderen ikut »

aslangeri yazdı:s.a.
iyide arkadaşım senin tarih tipinde bir alanın yok o yüzden karşılaştırmaları integer olarak yapacaksın.
dediğim şekilde çarptığın zaman integer tarihi elde edebiliyorsun (öyle değilmi?)
gün,ay,yıl şeklinde ayrı tutulan db ye calc alan ekleyip karşılaştırmalarını o alana göre yapabilirsin(kullandığın vt de calc alan varmı bilmiyorum)
birde verdiği hata mesajını ve senin kullanıdğın kodları gönderirsen belki bişeyler çıkartabiliriz.
Ve aleykum selam..

hocam burda amaç şu. as/400 de duran 2 vt den bir sorgu ile kaytları çekip göstermek ve istenirse excele atma. dolayısı ile pc tarafında hiç bişi yok.

ben bu kodları kendi yazdığım bir sorgu çalıştırıcıda run ediyorum.

veridğin örnekte kod TAr olsun. tar ='xxxx' yada tar=200022202 gibi rakamsal karşılık kullanıca TAR adında bir kolon yok diyor.. yoksa bu çözüm mükemmel bir çözüm

Kod: Tümünü seç

Integer ile sayı yaptım genede where ile kullanamadım.. 

IBM iseries Access odbc driver sql0206 - belirlenen çizgilerde TAR kolonu yok diyor
Cevapla