2015-05-07 2 views
1

Мне нужно создать ограничение или что-то подобное, что позволяет использовать только символы A-Z, _ и - в столбце.Запретить определенные символы

Как это можно сделать?

+0

какая база данных? –

+0

это о MS SQL 2008r2, а не mySQL! –

+6

Какие РСУБД вы используете? SQL Server, Oracle, MySQL? –

ответ

5

попробовать this..It работать отлично в мс sql server

CREATE TABLE TestTable 
(ID INT, FirstCol VARCHAR(100), 
CONSTRAINT FirstCol CHECK (FirstCol NOT LIKE '%[^a-zA-Z\_-]%' ESCAPE '\')) 
+0

НРАВИТСЯ, НЕ НРАВИТСЯ. («разрешает только такие символы, как AZ, _ и -.») – jarlh

+2

@jarlh - это двойное отрицание, потому что мы знаем символы, которые разрешаем и не хотим перечислять все символы, которые нельзя разрешить (обратите внимание на '^' внутри '[]'). Таким образом, 'НЕ НРАВИТСЯ 'здесь правильно. –

+0

Извините, слишком рано для меня ... Не заметил ^. Но почему не просто «LIKE»% [a-zA-Z \ _-]% 'ESCAPE' \ '"? – jarlh

0

Вы можете использовать ограничения regex, если они поддерживаются.

примера с использованием PostgreSQL выглядит следующим образом:

CREATE TABLE user(
    name VARCHAR 
    CONSTRAINT constraint_name CHECK (name ~* '^[A-Z_-]*$') 
); 

Обратите внимание, что это регулярное выражение позволяет пустые строки и никаких символов нижнего регистра.

В противном случае (в случае MySQL), вы можете использовать вставку-триггер:

DELIMITER $$ 
CREATE TRIGGER trigger_name BEFORE INSERT ON table_name 
    FOR EACH ROW 
    BEGIN 
     IF (NEW.phone REGEXP '^[A-Z_-]*$') = 0 THEN 
      SIGNAL SQLSTATE '12345' 
      SET MESSAGE_TEXT = 'Invalid content'; 
    END IF; 
END$$ 
DELIMITER ; 

Для MS SQL:

CREATE TABLE table_name(
    name VARCHAR(100) CHECK (name NOT LIKE '%[^A-Z_-]%' 
)) 
Смежные вопросы