Конференция "Базы" » Поиск символа из мас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.
    :.

  • DelphiN! (23.07.08 10:16) [20]
    Если я заменяю :i на статическое число, то все работает, как решить это проблему?
    Ch = substring(:S from :i for 1);
    на
    Ch = substring(:S from 1 for 1);
  • Правильный$Вася (23.07.08 11:10) [21]

    >  Какой есть аналог функции для FB 1.5?

    подключи UDF, в твоей версии неттакой встроенной функции, но есть в стандартном списке UDF
    при этом понимает параметры-переменные
  • DelphiN! (23.07.08 11:43) [22]

    > Правильный$Вася   (23.07.08 11:10) [21]


    А как подключить UDF?
  • DelphiN! (23.07.08 11:57) [23]
    В смысле какое описание должно быть у "правильной" substring?
  • Правильный$Вася (23.07.08 13:00) [24]

    > В смысле какое описание должно быть у "правильной" substring?

    в справке по IB6 написано
  • Loginov Dmitry © (23.07.08 22:27) [25]
    > В FB 2.1 данная процедура работает хорошо, но при попытки
    > использования ее в FB 1.5.1 ругается на строку Ch = substring(:
    > S from :i for 1);. Какой есть аналог функции для FB 1.5?


    Так тыж FB 2.1 используешь (см [5]). К чему тогда о проблемах с FB 1.5 спрашивать?
  • DelphiN! (24.07.08 04:42) [26]

    > Loginov Dmitry ©   (23.07.08 22:27) [25]



    > DelphiN!   (23.07.08 10:03) [19]



    > В FB 2.1 данная процедура работает хорошо, но при попытки
    > использования ее в FB 1.5.1 ругается на строку


    Основная версия FB в компании 2.1, однако на некоторых серверах еще осталась 1.5.1 ...
  • DelphiN! (24.07.08 04:54) [27]

    > Правильный$Вася   (23.07.08 13:00) [24]
    >
    > в справке по IB6 написано


    Не могу найти :(
  • turbouser © (24.07.08 08:36) [28]

    > DelphiN!   (23.07.08 11:57) [23]

    см. \program files\firebird\udf\ib_udf.sql
    выполняешь скрипт - будет в базе функция
    substr


    и еще много чего полезного :)
  • Найди RFUNC - там все есть, DLL скрипты на подключение/отключение UDF. Бесплатная библиотека
  • DelphiN! (24.07.08 12:04) [30]

    > turbouser ©   (24.07.08 08:36) [28]
    >
    > см. \program files\firebird\udf\ib_udf.sql
    > выполняешь скрипт - будет в базе функция substr
    > и еще много чего полезного :)


    Заработало!!!

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