Конференция "Базы" » Поиск символа из масcива в строке [FireBird 2.1]
 
  • DelphiN! (22.07.08 13:08) [0]
    Нужно написать запрос, который выводил все записи, в которых встречается какой либо символ из английского и русского алфавита, как можно это сделать?
    Нужно что-то похожее на
    select * from table where field1 in ['A..'z']

  • Dizzel (22.07.08 13:11) [1]
    Вернее
    select * from table where ['A..'z'] in field1

  • DelphiN! (22.07.08 13:11) [2]

    > Dizzel   (22.07.08 13:11) [1]


    Это я ...
  • turbouser © (22.07.08 13:23) [3]

    > DelphiN!  

    ХП + substring
  • stas © (22.07.08 13:24) [4]
    В MS SQL можно так: field1 like '%[А-Я]%'
  • DelphiN! (22.07.08 13:46) [5]

    > stas ©   (22.07.08 13:24) [4]


    В FireBird 2.1 так не работает


    > turbouser ©   (22.07.08 13:23) [3]


    А без хранимых процедур никак?
  • turbouser © (22.07.08 13:51) [6]

    > DelphiN!   (22.07.08 13:46) [5]
    > А без хранимых процедур никак?

    case -ом :)
  • turbouser © (22.07.08 13:53) [7]

    > DelphiN!   (22.07.08 13:46) [5]

    Лови...

    CREATE PROCEDURE EN_RU (
       s varchar(50) character set cyrl)
    returns (
       idx integer)
    as
    declare variable i integer;
    declare variable ch char(1) character set cyrl;
    declare variable en varchar(30);
    declare variable ru varchar(34);
    begin
    EN='ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    RU='АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ';
    I=1;
    while (i<=strlen(:S)) do
    begin
     Ch = substring(:S from :i for 1);
     if ((:EN containing :Ch) or (:RU containing :Ch)) then
     begin
       IDX=:I;
       break;
       end
     I=:I+1;
     end
     suspend;
    end

  • Правильный$Вася (22.07.08 14:00) [8]
    UDF сделай
  • DelphiN! (22.07.08 14:55) [9]

    > turbouser ©   (22.07.08 13:53) [7]
    >
    > Лови...


    Спасибо!

    А можно ли проверить число ли в строке или нет? Только без ХП
  • PEAKTOP © (22.07.08 14:59) [10]
    можно еще

    SELECT  T1.*
    FROM    table1 T1
    WHERE  (T1.FIELD1 SIMILAR TO '[A-z]')
         OR  (T1.FIELD1 SIMILAR TO '[А-я]')



    Но для использования нужен Firebird не ниже версии 2.5.0.20343
  • PEAKTOP © (22.07.08 15:01) [11]
    > А можно ли проверить число ли в строке или нет? Только без ХП

    Аналогично

    SELECT  T1.*
    FROM    table1 T1
    WHERE  (T1.FIELD1 SIMILAR TO '[0-9]')

  • turbouser © (22.07.08 15:02) [12]

    > DelphiN!   (22.07.08 14:55) [9]

    См. [8]
  • turbouser © (22.07.08 15:02) [13]

    > PEAKTOP ©

    2.5 еще альфа совсем...
  • Сергей М. © (22.07.08 16:51) [14]

    > можно ли проверить число ли в строке или нет?


    Можно, если ты понимаешь, что такое "число в строке")
  • Правильный$Вася (22.07.08 17:29) [15]

    > А можно ли проверить число ли в строке или нет?

    'abcd345efg' LIKE '%345%'
  • stas © (22.07.08 17:34) [16]
    Правильный$Вася   (22.07.08 17:29) [15]
    не он хочет узнать есть ли в строке abcd345efg число
  • Правильный$Вася (22.07.08 18:46) [17]

    > stas ©   (22.07.08 17:34) [16]

    если число конкретное, то [15]
    если узнать, а вообще число ли оно, то CAST
  • Loginov Dmitry © (23.07.08 00:02) [18]
    > А можно ли проверить число ли в строке или нет? Только без
    > ХП


    EXECUTE BLOCK. Аналог ХП, но можно задавать как и любой SELECT-запрос в компоненте TIBDataSet. Поддерживается с версии 2.0. Хороший пример есть в статье РЕАКТОРА "Firebird 2.0 на полную катушку".
  • DelphiN! (23.07.08 10:03) [19]
    Спасибо все за советы!
    Так как используется FB ниже 2.5 придётся использовать ХП ...


    BEGIN
    USERTYPE = 'MEMBER';
    NUM='0123456789';
    I=1;
    Ch = '/';
    while ((ch <> '')and(usertype = 'MEMBER')) do
    begin
    Ch = substring(:S from :i for 1);
    if ((:NUM containing :Ch)) then
    begin
      USERTYPE = 'NUM';
      break;
    end
    I=:I+1;
    end
    suspend;
    END



    В FB 2.1 данная процедура работает хорошо, но при попытки использования ее в FB 1.5.1 ругается на строку Ch = substring(:S from :i for 1);. Какой есть аналог функции для FB 1.5?
    Вот ошибка :

    Invalid token.
    Dynamic SQL Error.
    SQL error code = -104.
    Token unknown - line 16, column 25.
    :.

 
Конференция "Базы" » Поиск символа из масcива в строке [FireBird 2.1]
Есть новые Нет новых   [134473   +28][b:0][p:0.002]