Select de sadece sayısal ifadeler gelsin.

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Kullanıcı avatarı
musti
Üye
Mesajlar: 527
Kayıt: 11 Tem 2005 09:44

Select de sadece sayısal ifadeler gelsin.

Mesaj gönderen musti »

S.a.
Select sırasıdnda varchar tanımlı olan bir alana eger harfler girilmişse cast ile floata cevirken hata veriyor.
ya null olacak yada sayı olacak diyor. bunu nasıl çozeriz.

Yada select derken where sadece sayısal degerler girikmiş olanları getir nasıl denir.

teşekkür ederim.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Select de sadece sayısal ifadeler gelsin.

Mesaj gönderen sabanakman »

SQL Server'da isNumeric sorgu fonksiyonu vardı, muhtemelen aynısı ya da benzeri FB'de de vardır.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
musti
Üye
Mesajlar: 527
Kayıt: 11 Tem 2005 09:44

Re: Select de sadece sayısal ifadeler gelsin.

Mesaj gönderen musti »

Ne yazıkkı yok yada ben bulamadım.
:(
Kullanıcı avatarı
musti
Üye
Mesajlar: 527
Kayıt: 11 Tem 2005 09:44

Re: Select de sadece sayısal ifadeler gelsin.

Mesaj gönderen musti »

Acaba StrtoInt veya StrTointdef gibi bir udf varmi?
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Re: Select de sadece sayısal ifadeler gelsin.

Mesaj gönderen Kuri_YJ »

Selamlar,

Geç oluyor ama yine de sorayım, neden VARCHAR alanda Numeric bir değer olup olmadığını öğrenmek istiyorsunuz, yani Kullanıcılar oraya hem sayısal hem de karakter bilgi mi giriyor?

Yani nedenini öğrenebilirsek, en azından farklı çözümler koyabiliriz ortaya.

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
musti
Üye
Mesajlar: 527
Kayıt: 11 Tem 2005 09:44

Re: Select de sadece sayısal ifadeler gelsin.

Mesaj gönderen musti »

Evet
hem sayısal hemde strıng ıfade oluyor
bu alana arge sonucları gırılıyor. soyleki

1 ıle 100 arasında sayı gırıldıgı gıbı
yok
bulunamadı
uygun
uygun degıl
katkılı

gıbı bilgiler
veya araştırmacının kendi degerleri girebilir
bunun yani sıra
sonuc degerler x2*y de diyebilir

biz sadece toplanabılır degerleri listeleyip toplamını almak istemiştik.
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Re: Select de sadece sayısal ifadeler gelsin.

Mesaj gönderen Kuri_YJ »

Selamlar,

Bence sonuç kısmında Sonuç Açıklama diye bir alan oluşturup bunları oraya ayıklayın. Basit bir delphi programı ile mevcut dataları ayıklayabilirsiniz.

Yani SONUC_INTEGER, SONUC_VARCHAR olarak iki FIELD'a bölün. Daha sonra oradan istediğiniz sorguları çekebilirsiniz. İleride de bu gibi incelemeler için sıklıkla karşılaşabilirsiniz, bence field'ları ayrıştırın.

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Select de sadece sayısal ifadeler gelsin.

Mesaj gönderen sabanakman »

Ayrıca mevcut kurulmuş yapı için isNumeric ayarında bir UDF hazırlamanın yolları da aranabilir.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
sair
Kıdemli Üye
Mesajlar: 288
Kayıt: 16 Haz 2003 04:41
Konum: Kastamonu
İletişim:

Re: Select de sadece sayısal ifadeler gelsin.

Mesaj gönderen sair »

Neden where ifadesinde sayısal olmayanları elemeyi denemiyorsun

Where alan<>'uygun' and alan<>'Yok' and alan<>'bulunamadı' and v.s.

Büyük ihtimalle string olarak girdiğin ifadeler sabittir.. Sabitse bu şekilde çözebilirsin...

Selamlar..
Geçip gideriz bizde ağızsız,dilsiz ve sorgusuz
İstanbul gibi düşeriz iki kıtaya birden...
En aşağılık düş, en büyük sevdadan belki
Erkek ölümler; bir uzun iç çekişle büyür göğsümüz
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Select de sadece sayısal ifadeler gelsin.

Mesaj gönderen sabanakman »

String bilgilerin bir standardı yoktur, araya muhakkak sürpriz değerler girilir veya girilecektir. Programcı olarak String bilgilerin tutarlı omayacağı üzerine temel kurmak daha sağlam bir yapılandırma olacaktır.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
musti
Üye
Mesajlar: 527
Kayıt: 11 Tem 2005 09:44

Re: Select de sadece sayısal ifadeler gelsin.

Mesaj gönderen musti »

s.a
Zaten amacım where ıle cozmek ama olmuyor. where = sayısal olmuyor
ikinci bir alan acmak işime gelmiyor.
bir daha iki yere gir diyemem ve geri donuk hic olmaz
Kullanıcı avatarı
mustafaozdemir
Üye
Mesajlar: 137
Kayıt: 19 Haz 2004 01:56

Re: Select de sadece sayısal ifadeler gelsin.

Mesaj gönderen mustafaozdemir »

s.a.
şöyle bir çözümde üretebilirsin. tablona kayit_durum diye bir alan ekle. 0 ve 1 değerlerini alsın. delphi tarafından kaydederken kullanıcıların girdiği alanı kontrol et. string ifadeler girilmişse 0 sayısal ifadeler girilmişse 1 değerini atarsın. böylece sorguda da where (kayit_durum=1) diyere sadece sayısal ifadeleri çekersin.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Select de sadece sayısal ifadeler gelsin.

Mesaj gönderen sabanakman »

Ben hala UDF'den yanayım. FB kullanmadım ama aramayla karşıma ilk çıkan sonucu direk veriyorum.

http://www.experts-exchange.com/Databas ... 82624.html..(Biraz fazla sonlarda ama olsun):
CREATE FUNCTION libraryname.isNumeric (@value varchar (15)) RETURNS INTEGER LANGUAGE SQL

BEGIN

declare @number_count int
;

declare @decimal_count int;

set @decimal_count = 0
;

set @number_count = char_length(@value)
;

while (@number_count > 0)

DO

if(substring(@value,@number_count,1)
IN ('0','1','2','3','4','5','6','7','8','9','.'))
Then

set @number_count = @number_count - 1
;

if(substring(@value,@number_count,1) = '.')
Then

set @decimal_count = @decimal_count + 1
;

if(@decimal_count > 1)
Then



return 0
;

end

if;

end if
;

else return 0
;

end if;

end while;

return 1;

end
;
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Re: Select de sadece sayısal ifadeler gelsin.

Mesaj gönderen Hakan Can »

İlla direk SQL cümlesi ile yapmak istiyorsan şuna benzer bir SQL cümlesi kullanabilirsin:

Kod: Tümünü seç

SELECT
  SUM(DEGER) AS DEGER
FROM TABLO
WHERE SUBSTRING(DEGER FROM  1 FOR 1) IN ('1', '2', '3', '4', '5', '6', '7', '8', '9') AND
      SUBSTRING(DEGER FROM  2 FOR 1) IN ('1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '', NULL) AND
      SUBSTRING(DEGER FROM  3 FOR 1) IN ('1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '', NULL) AND
      SUBSTRING(DEGER FROM  4 FOR 1) IN ('1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '', NULL) AND
      SUBSTRING(DEGER FROM  5 FOR 1) IN ('1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '', NULL) AND
      SUBSTRING(DEGER FROM  6 FOR 1) IN ('1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '', NULL) AND
      SUBSTRING(DEGER FROM  7 FOR 1) IN ('1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '', NULL) AND
      SUBSTRING(DEGER FROM  8 FOR 1) IN ('1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '', NULL) AND
      SUBSTRING(DEGER FROM  9 FOR 1) IN ('1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '', NULL) AND
      SUBSTRING(DEGER FROM 10 FOR 1) IN ('1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '', NULL)
Değişken 10 karakterden farklıysa ona göre düzenlemelisin.
Kullanıcı avatarı
musti
Üye
Mesajlar: 527
Kayıt: 11 Tem 2005 09:44

Re: Select de sadece sayısal ifadeler gelsin.

Mesaj gönderen musti »

Tskler
Cevapla