powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Отсечение цифр от букв в строке. firebird 2.5.
9 сообщений из 9, страница 1 из 1
Отсечение цифр от букв в строке. firebird 2.5.
    #37339470
wotka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.
Есть строки, необходимо вытащить только цифры, то есть:
(источник => результат)
DT1_NARABOTKI => 1
KOLVO_IMPULSOV_VHOD_11 => 11
DM_2_TONNY => 2
На оракле такую тему уже обсуждали, на фб функции tranclate() нет, а функция replace() работает иначе, что не позволяет переделать оракловский код. Если захотите сами проверить, вот обсуждение на оракле - /topic/175677#1463696
Или такое невозможно сделать на firebird?
...
Рейтинг: 0 / 0
Отсечение цифр от букв в строке. firebird 2.5.
    #37339499
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wotkaЗдравствуйте.
Есть строки, необходимо вытащить только цифры
Ну и делай на клиенте чего хошь.
FB тут при как?
...
Рейтинг: 0 / 0
Отсечение цифр от букв в строке. firebird 2.5.
    #37339524
wotka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тьху, башка уже не варит. Первый день работаю с фб, 4 часа уже этот запрос пытаюсь придумать.
Юзаю субд IBExpert. Нужен именно sql код.
Извините если запутываю, я новичок :)
...
Рейтинг: 0 / 0
Отсечение цифр от букв в строке. firebird 2.5.
    #37339528
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если группы цифр встретятся несколько раз?
Ничего не мешает написать УДФ с требуемым функционалом.
...
Рейтинг: 0 / 0
Отсечение цифр от букв в строке. firebird 2.5.
    #37339621
tetxx_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wotka, если количество "прочих" симполов ограничено (например, только латинские буквы), можешь сделать
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
select 
replace(
replace(
replace(
источник
,'A','')
,'B','')
,'C','')
from ...
...
Рейтинг: 0 / 0
Отсечение цифр от букв в строке. firebird 2.5.
    #37339702
wotka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tetxx_, спасибо.
...
Рейтинг: 0 / 0
Отсечение цифр от букв в строке. firebird 2.5.
    #37340071
Anton_bg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тебе нужна функция

DECLARE EXTERNAL FUNCTION F_DIGITS
CSTRING(32760) NULL
RETURNS CSTRING(32760) FREE_IT
ENTRY_POINT 'digits' MODULE_NAME 'FreeAdhocUDF';

Потом сделай

select F_DIGITS('asd12 er3')
from rdb$database

Получиш как резултат
'123'

Антон
...
Рейтинг: 0 / 0
Отсечение цифр от букв в строке. firebird 2.5.
    #37340119
BanditJolly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wotka,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
CREATE PROCEDURE EXTRACT_DIGITS (
    STRING varchar( 32 ))
returns (
    DIGITS varchar( 32 ))
as
declare variable CH char( 1 );
declare variable L integer;
declare variable I integer;
begin
   digits = '';
   L = CHAR_LENGTH(string);
   I =  1 ;
   while (I <= L) do begin
      CH = substring(STRING from I for  1 );
      if (CH between '0' and '9') then
         DIGITS = DIGITS || CH;
      I = I +  1 ;
   end
  suspend;
end
Код: plaintext
1.
2.
3.
select * from extract_digits('0q1w2e3r4nbv59xxx')
DIGITS

 0123459 
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Отсечение цифр от букв в строке. firebird 2.5.
    #39075773
Парус
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BanditJolly,

спасибо, пригодилось.

Несколько модифицированная функция

B_DIGITS: 1 вытаскивает только цифры, 0 только нецифры


create or alter procedure RSP11_EXTRACT_DIGITS (
STRING varchar(32),
B_DIGITS integer)
returns (
CH_RESULT varchar(32))
AS
declare variable CH char(1);
declare variable L integer;
declare variable I integer;
begin
CH_RESULT = '';
L = CHAR_LENGTH(string);
I = 1;
while (I <= L) do begin
CH = substring(STRING from I for 1);
if
(
((CH between '0' and '9') AND (B_DIGITS=1))
or
(not (CH between '0' and '9') AND (B_DIGITS=0))
)
then
CH_RESULT = CH_RESULT || CH;
I = I + 1;
end
suspend;
end
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Отсечение цифр от букв в строке. firebird 2.5.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]