icinde alfanumerik karakter gecen stringi bulma

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
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

icinde alfanumerik karakter gecen stringi bulma

Mesaj gönderen gkimirti »

bir sp icinde varchar tanımlı bir degiskenin icinde (giris parametresi) alfanumeric karakterlerin olup olmadıgını nasıl ogrenirim.
string numeric ise ayrı bir islem alfanumerik ise daha farklı bir islem yaptırmam lazım.
stringin tum karakterlerini bir dongu ile

select count(*) from rdb$database
where :BIRKARAKTER in ('1','2','3','4','5','6','7','8','9','0')

bu sekilde kontrol etmekten daha pratik bir cozum var mıdır?
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

merhaba, karakterin rakam olup olmadığını anlamanın sizin yöneteme göre daha az karmaşık olanı şöyle olabilir,

Kod: Tümünü seç

IF (KARAKTER<'A') and (KARAKTER>'0') THEN .... BU bir SaYII...
gibi..
iyi çalışmalar.
Volkan KAMADAN
www.polisoft.com.tr
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Bir regex UDF function'ı kullanabilirsin.

Kod: Tümünü seç

regex=/[0-9A-Za-z]*/;
regex'i bu şekilde tanımladıktan sonra dönüş değerini kontrol edersin.
onaydin

Mesaj gönderen onaydin »

@vkamadan ın ifadesine benzer şekilde

Kod: Tümünü seç

select 1 as deger from   RDB$DATABASE where '1' = upper('1')
gibi bir ifadeylede olabilir, eşitliğn sol tarafı lower sağ tarafı upper olunca
numericlerde 1 döner.
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

saolun, bende su sekilde numaralarıda sayısal kabul edecegim icin
(12345-12348) kendim soyle bir procedure yazdım is goruyor simdilik,

Kod: Tümünü seç

CREATE PROCEDURE P_IS_ALPHANUMERIC (
    INPUTSTR VARCHAR(255))
RETURNS (
    Q SMALLINT)
AS
DECLARE VARIABLE I INTEGER;
DECLARE VARIABLE L INTEGER;
DECLARE VARIABLE CH SMALLINT;
begin
  q=0;i=1;l=strlen(:INPUTSTR)+1;

  while(i<l)do
  begin
    ch=ord(substr(:INPUTSTR,i,1));
    if ((not (chr(ch) in ('-','/',';') )) and ((ch<48) or (ch>57)))  then--alphanumeric
    begin
      q=1;
      suspend;
      exit;
    end
    i=i+1;
  end
  suspend;
end
ÜŞENME,ERTELEME,VAZGEÇME
Cevapla