Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Подскажите как получить только цифры из строки или исключить пробелы и энтер? / 11 сообщений из 11, страница 1 из 1
13.07.2021, 08:44
    #40083496
mr.Ulugbek
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как получить только цифры из строки или исключить пробелы и энтер?
Привет всем,
Подскажите как получить только цифры из строки или исключить пробелы и энтер?
есть поля varchar (100) для номер телефона
там данные храниться так примерно с энтерами и пробелами

Код: plsql
1.
2.
3.
4.
998 456 22 55 
85 12 32 45
4112321321
455454555 41 555 5554 45



Ищу так но не работает потому что там пробелы
Код: plsql
1.
select * from sometable where phone_num containing :param



Заране благодарен
...
Рейтинг: 0 / 0
13.07.2021, 09:06
    #40083497
AltHasp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как получить только цифры из строки или исключить пробелы и энтер?
mr.Ulugbek,
функция Replace, если перманентно нужно заменить или
функция Substring. Коды симввола возврата каретки #10,#13, код пробела #32.

Удачи !
...
Рейтинг: 0 / 0
13.07.2021, 10:06
    #40083505
mr.Ulugbek
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как получить только цифры из строки или исключить пробелы и энтер?
Взял с стэковера
если кому интересно
этот код обернул функцию

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
EXECUTE BLOCK
RETURNS (number VARCHAR(100))
AS
  DECLARE VARIABLE temp VARCHAR(100);
  DECLARE VARIABLE temp_char VARCHAR(1);
  DECLARE VARIABLE step INT;
BEGIN
  FOR SELECT
    sometable.sometext
  FROM sometable
  INTO :temp DO
  BEGIN
    step = 1;
    number = '';
    WHILE (:step < CHAR_LENGTH(:temp)) DO
    BEGIN
      temp_char = SUBSTRING(:temp FROM step FOR 1);
      IF (POSITION(:temp_char IN '0123456789') > 0) THEN
        number = :number || :temp_char;

      step = step + 1;
    END
    SUSPEND;
  END
END
...
Рейтинг: 0 / 0
13.07.2021, 10:12
    #40083507
m7m
m7m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как получить только цифры из строки или исключить пробелы и энтер?
mr.Ulugbek,

ты ж не удосужился даже проверить правильность работы
и поспешил опубликовать
...
Рейтинг: 0 / 0
13.07.2021, 10:14
    #40083509
mr.Ulugbek
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как получить только цифры из строки или исключить пробелы и энтер?
Почему проверил
работает. То есть функция работает

Если у вас есть другие решение поделитсеь пожалуйста
...
Рейтинг: 0 / 0
13.07.2021, 10:24
    #40083514
m7m
m7m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как получить только цифры из строки или исключить пробелы и энтер?
mr.Ulugbek,
Однако недопроверил.
Ибо работает, но результат НЕ всегда верный

уже предлагали 22346677
Код: sql
1.
2.
3.
b=replace(b,' ','');
b=replace(b,ascii_char(13),'');
b=replace(b,ascii_char(10),'');



зы. Проверь для строки '12345'
...
Рейтинг: 0 / 0
13.07.2021, 12:16
    #40083542
mr.Ulugbek
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как получить только цифры из строки или исключить пробелы и энтер?
Сорри вот этот код я переделал функцию

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SET TERM ^ ;

create or alter procedure GET_DIGIT_ONLY (
    IPARAM varchar(100))
returns (
    OPARAM varchar(100))
as
declare variable I integer;
begin
  oparam = '';
  i = 1;
  while (i <= char_length(:iparam)) do
  begin
    if (substring(:iparam from i for 1) similar to '[0123456789]')  then
      oparam = :oparam || (substring(:iparam from i for 1));
    i = :i + 1;
  end
  suspend;
end^

SET TERM ; ^
...
Рейтинг: 0 / 0
13.07.2021, 12:32
    #40083547
WildSery
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как получить только цифры из строки или исключить пробелы и энтер?
mr.Ulugbek,

Ты же понимаешь, что используя процедуру "убрать все символы кроме цифр" вместо простой уборки пробелов заменой, теряешь в производительности ОЧЕНЬ сильно?
...
Рейтинг: 0 / 0
13.07.2021, 12:43
    #40083552
mr.Ulugbek
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как получить только цифры из строки или исключить пробелы и энтер?
WildSery
Пока быстро работает но пока...

В таблице где то 6000 запись

Такой вариант работает быстрее фунции?

Код: sql
1.
2.
3.
4.
5.
6.
7.
select
  replace(
    replace(
      replace(t.phone, ' ', ''),
    '-', ''),
  '/', '') AS phone
from sometable t
...
Рейтинг: 0 / 0
13.07.2021, 14:48
    #40083590
WildSery
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как получить только цифры из строки или исключить пробелы и энтер?
mr.Ulugbek,

Замерь, в чём проблема-то.
Думаю, что значительно быстрее. Даже если ещё сверху пару реплейсов накрутить.
...
Рейтинг: 0 / 0
13.07.2021, 18:23
    #40083623
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как получить только цифры из строки или исключить пробелы и энтер?
mr.Ulugbek
Пока быстро работает но пока...
Почему рядом с исходным полем не повесить поле-агрегат на триггере? реплейсы в триггер, поиск по очищенному от шелухи полю будет куда быстрее.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Подскажите как получить только цифры из строки или исключить пробелы и энтер? / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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