Как изменить столбец, чтобы он принимал значения в каком-то определенном формате?

#sql #postgresql #check-constraints

#sql #postgresql #проверка-ограничения

Вопрос:

В моей таблице есть столбец, который показывает номер телефона, и я хочу добавить ограничение, при котором этот номер должен быть в определенном формате, например cod.country-cod.local-num.local . Например: ' 54-351-4350114' .

И позже я хочу добавить ограничение, в котором num.local должно быть не менее 7 цифр.

Ответ №1:

Я предполагаю, что вы ищете ограничение CHECK Postgres: такое ограничение принимает регулярное выражение с SIMILAR TO оператором:

 ALTER TABLE mytable ADD CONSTRAINT phone_number_check CHECK(
    phone_number SIMILAR TO ' d -d -d{7,}'
)
  

Объяснение регулярного выражения:

          the   sign
d        at least one digit
-         the - sign
d        at least one digit
-         the - sign
d{7,}    at least 7 digits
  

Это позволит использовать такие значения, как ' 54-351-1234567' , в то время как, например, отклоняет ' 54-351-123456' . Вы можете свободно адаптировать регулярное выражение к вашим конкретным требованиям, используя регулярные выражения Postgres.

Демонстрация на DB Fiddle

Комментарии:

1. Большое вам спасибо. Возможно ли присвоить имена каждой части телефонного номера? Например: cod.country-cod.local-num.local