Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.10.2012, 00:50   #1
Raz0r
Пользователь
 
Регистрация: 06.11.2007
Сообщений: 47
По умолчанию Шаблон для проверки телефона

Подскажите, пожалуйста, как создать CHECK на столбец, чтобы он проверял вводимый телефон на соответствие шаблону:
+7([3-5 цифр 0-9])[1-3 цифры]-[2 цифры]-[2 цифры]
Например:
+7(123)123-12-12
+7(1234)12-12-12
+7(12345)1-12-12
Raz0r вне форума Ответить с цитированием
Старый 13.10.2012, 08:55   #2
Karabash
Форумчанин
 
Регистрация: 26.07.2009
Сообщений: 216
По умолчанию

Например так:
Код:
ALTER TABLE <table> ADD CHECK
(<field> LIKE '+7(_____)_-__-__' or <field> LIKE '+7(____)__-__-__' or <field> LIKE '+7(___)___-__-__')
Если речь идет о FB или IB (не мешало бы указывать какая СУБД используется).

Проблемы:
- проверки на цифры все же нет;
- нужно будет обрабатывать сообщения сервера СУБД. А оно вам надо?
Karabash вне форума Ответить с цитированием
Старый 13.10.2012, 14:33   #3
Raz0r
Пользователь
 
Регистрация: 06.11.2007
Сообщений: 47
По умолчанию

Спасибо, СУБД MSSQL 2008. А на цифры как-то можно проверку сделать, чтобы буквы в эти позиции нельзя было вставлять?

вместо '_' можно вставить '[0-9]' и всё будет работать, но выглядит как-то громоздко. Может можно как-то регулярками это всё написать?

Последний раз редактировалось Stilet; 13.10.2012 в 20:59.
Raz0r вне форума Ответить с цитированием
Старый 13.10.2012, 19:06   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Будет выглядеть примерно так
Код:
MyPole LIKE '+7([0-9][0-9][0-9])[0-9]-[0-9][0-9]-[0-9][0-9]' OR
MyPole LIKE '+7([0-9][0-9][0-9])[0-9][0-9]-[0-9][0-9]-[0-9][0-9]' OR
MyPole LIKE '+7([0-9][0-9][0-9])[0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]' OR
MyPole LIKE '+7([0-9][0-9][0-9][0-9])[0-9]-[0-9][0-9]-[0-9][0-9]' OR
MyPole LIKE '+7([0-9][0-9][0-9][0-9])[0-9][0-9]-[0-9][0-9]-[0-9][0-9]' OR
MyPole LIKE '+7([0-9][0-9][0-9][0-9])[0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]' OR
MyPole LIKE '+7([0-9][0-9][0-9][0-9][0-9])[0-9]-[0-9][0-9]-[0-9][0-9]' OR
MyPole LIKE '+7([0-9][0-9][0-9][0-9][0-9])[0-9][0-9]-[0-9][0-9]-[0-9][0-9]' OR
MyPole LIKE '+7([0-9][0-9][0-9][0-9][0-9])[0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]'
Можно заменить обращением к пользовательской скалярной udf-функции, но не думаю, что выполняться будет быстрей, скорее наоборот. Вот если написать dll, зарегистрировать на SQL-сервере, то можно обеспечить и скорость. Есть нюанс - не знаю, можно ли из check constraint обращаться к dll-библиотеке. Впрочем и выше приведенный код будет работать. И напоследок - MS SQL сам по себе не умеет работать с регулярными выражениями. То что использует LIKE это маленькая часть их возможностей. Но с привлечением других средств умеет, например http://msdn.microsoft.com/ru-ru/magazine/cc163473.aspx
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.10.2012, 02:23   #5
Raz0r
Пользователь
 
Регистрация: 06.11.2007
Сообщений: 47
По умолчанию

Спасибо, разобрался!
Raz0r вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Тест для проверки словарей Тотошка91 Общие вопросы Delphi 1 16.06.2011 23:14
Функции VBA для проверки правописания tumanovalex Microsoft Office Word 8 28.04.2011 18:59