iki alfanümerik arası sorgu yapma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
erdogan_ozkaya
Üye
Mesajlar: 772
Kayıt: 03 Eki 2007 01:00

iki alfanümerik arası sorgu yapma

Mesaj gönderen erdogan_ozkaya » 02 Şub 2018 09:20

Arkadaşlar,

DOSYA_NO adında bir alanım var tipi varchar(50) içine alfanümerik "ABC123456789" giriyorum.

Yapmak istediğim "ABC1000000" "ABC9000000" arasındaki kayıtları sorgulamak nasıl bir filtreleme yapabilirim ? aşağıdaki kodu kullanıyorum

Delphi7 kullanıyorum, MSSQL Veri Tabanı

Kod: Tümünü seç

     QRYDOSYALAR_DB.CLOSE;
     QRYDOSYALAR_DB.SQL.Clear;
     QRYDOSYALAR_DB.SQL.Add('SELECT * FROM DOSYALAR '
                         +' WHERE (DOSYALAR.GIRIS_TARIHI BETWEEN :Tar1 and :Tar2)');

    QRYDOSYALAR_DB.Parameters.ParamByName('Tar1').Value := FormatDateTime('DD/MM/YYYY',dtpGIRIS_TARIHI.date);
    QRYDOSYALAR_DB.Parameters.ParamByName('Tar2').Value := FormatDateTime('DD/MM/YYYY',dtpGIRIS_TARIHI1.date);

     if (EDT_EKLEYEN.Text <> '')
    then QRYDOSYALAR_DB.SQL.Add(' and EKLEYEN='+QuotedStr(EDT_EKLEYEN.Text)+'');


    QRYDOSYALAR_DB.Sql.Add(' order by dbo.TEKNIK_SERVIS_KAYIT.SERVIS_ID DESC');
    QRYDOSYALAR_DB.Open;
Teşekkürler

skalkan
Üye
Mesajlar: 19
Kayıt: 28 Haz 2003 07:05

Re: iki alfanümerik arası sorgu yapma

Mesaj gönderen skalkan » 02 Şub 2018 09:34

Kod: Tümünü seç

function SadeceRakamlar(s: string): string;
var
  i: integer;
  rsp: string;
begin
  Result := s;
  if Length(s) < 1 then Exit;
  rsp := '';
  for i := 1 to Length(s) do
  begin
    if s[i] in ['0'..'9'] then
      rsp := rsp + s[i];
  end;
  Result := rsp;
end;

erdogan_ozkaya
Üye
Mesajlar: 772
Kayıt: 03 Eki 2007 01:00

Re: iki alfanümerik arası sorgu yapma

Mesaj gönderen erdogan_ozkaya » 02 Şub 2018 10:29

hocan bunu nasıl kullanabilirim ? örnek atabilirmisiniz ?

skalkan
Üye
Mesajlar: 19
Kayıt: 28 Haz 2003 07:05

Re: iki alfanümerik arası sorgu yapma

Mesaj gönderen skalkan » 02 Şub 2018 10:43

Kod: Tümünü seç

//System.RegularExpressions
function ExtractNumbers(const s: string): string;
var
    regex: TRegEx;
begin
Result := '';
Result := TRegEx.Replace(s, '\D', '')
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text := ExtractNumbers('ABC1000000');
//Sonuc 1000000
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text := SadeceRakamlar('ABC1000000');
//Sonuc 1000000
end;

erdogan_ozkaya
Üye
Mesajlar: 772
Kayıt: 03 Eki 2007 01:00

Re: iki alfanümerik arası sorgu yapma

Mesaj gönderen erdogan_ozkaya » 02 Şub 2018 10:47

Hocam

A,B,C,D serisinden A100 ile B150 arası tüm raporları nasıl alabilirim ?

teşekkürler

kerpeten
Üye
Mesajlar: 40
Kayıt: 26 May 2016 12:31

Re: iki alfanümerik arası sorgu yapma

Mesaj gönderen kerpeten » 02 Şub 2018 03:58

Sorguya bu kısıtı da eklediğinizde olmuyor mu?
yani

...
and (DOSYA_NO between 'A100' and 'B150')
...

şeklinde...

erdogan_ozkaya
Üye
Mesajlar: 772
Kayıt: 03 Eki 2007 01:00

Re: iki alfanümerik arası sorgu yapma

Mesaj gönderen erdogan_ozkaya » 02 Şub 2018 04:04

yok hayır

kerpeten
Üye
Mesajlar: 40
Kayıt: 26 May 2016 12:31

Re: iki alfanümerik arası sorgu yapma

Mesaj gönderen kerpeten » 02 Şub 2018 04:50

alfanümerik alanlarda ascii koda göre sıralama yapar. Bence yazdıklarınızı tekrar gözden geçirin. Hatta sorguyu çalıştırmadan hemen önce SQL Profiler'i çalıştırırsanız SQL servere hangi sorguyu gönderdiğini görebilirsiniz.

ertank
Üye
Mesajlar: 982
Kayıt: 11 Eyl 2015 11:45

Re: iki alfanümerik arası sorgu yapma

Mesaj gönderen ertank » 02 Şub 2018 05:49

Merhaba,

Normalde @kerpeten 'in cevabı doğru. Sizin kısa cevabınız çalışmama sebebini açıklamamış. Hata mesajı mı alıyorsunuz? Yoksa sonuç boş mu geliyor? Yoksa başka bir sorun mu var?

Eğer sonuç boş oluyor ise öncelikle aşağıdaki şekilde deneyin.

Kod: Tümünü seç

QRYDOSYALAR_DB.Close();
QRYDOSYALAR_DB.SQL.Clear();
QRYDOSYALAR_DB.SQL.Add('SELECT * FROM DOSYALAR WHERE DOSYA_NO BETWEEN :No1 and :No2');
QRYDOSYALAR_DB.ParamByName('No1').AsString := 'ABC1000000';
QRYDOSYALAR_DB.ParamByName('No2').AsString := 'ABC9000000';
QRYDOSYALAR_DB.Open();
Yine de olmuyor ise; database içinde özel/gizli bilgi yok ise yedeğini paylaşabilirseniz inceleyip çalışan cevabı verebiliriz. Ancak database paylaşımı sırasında "test" verileri girip gönderir iseniz bu defa test verisi üzerinde çalışan cevabı vermiş oluruz. Orjinal verilerinizde farklı bir sorun var ise bu yine ortaya çıkmayabilir.

Cevapla