Ограничение данных на основе длины строки числа в SQL Developer - PullRequest
1 голос
/ 07 апреля 2020

Я пытаюсь включить в запрос данные о сотрудниках с номерами телефонов из 10 цифр. Они отображаются как ###.###.#### или ###.##.####.###### в таблице.

Как бы я использовал функцию where, чтобы включить только 10 чисел git. Код ниже и другие, которые я пробовал, приводят к ошибкам.

select column_a, column_b
from employees 
where phone_number like '__________'

Ответы [ 2 ]

0 голосов
/ 07 апреля 2020

Если ваша таблица небольшая, вы можете удалить номера с телефонных номеров, а затем проверить длину. Функции для этого варьируются от базы данных к базе данных. Вот как вы можете сделать это в MySQL с regexp_replace.

select column_a, column_b
from employees 
where length(regexp_replace(phone_number, '[^[:digit:]]', '')) = 10

Это хорошо для небольших столов. Если ваша таблица большая, это может привести к проблемам с производительностью. Поскольку он рассчитан, он должен сканировать каждую строку. Один из способов справиться с этим - добавить сгенерированный столбец , который нормализует номер телефона.

alter table employees
  add column phone_number_normalized varchar(20)
  generated always as (
    regexp_replace(phone_number, '[^[:digit:]]', '')
  )
  stored;

create index phone_number_normalized on employees (phone_number_normalized);

Это добавляет столбец phone_number_normalized, автоматически сгенерированный из phone_number, и сохраняет только цифры. И это индексирует это. Тогда ваш запрос и другие запросы станут проще и эффективнее.

select column_a, column_b
from employees 
where length(phone_number_normalized) = 10

Наконец, если вы много работаете с телефонными номерами, вместо того, чтобы хранить их в виде строки, вы можете wi sh для их анализа. и положить их на свой стол. Затем вы можете хранить такие вещи, как код страны, код города и т. Д.

0 голосов
/ 07 апреля 2020

Я бы сделал проверку на входе

<input runat="server" type="text" class="form-control" maxlength="10" id="txtPhoneNumber" placeholder="### ### ####" />
...