Мне нужно создать ограничение или что-то подобное, что позволяет использовать только символы A-Z
, _
и -
в столбце.Запретить определенные символы
Как это можно сделать?
Мне нужно создать ограничение или что-то подобное, что позволяет использовать только символы A-Z
, _
и -
в столбце.Запретить определенные символы
Как это можно сделать?
попробовать this..It работать отлично в мс sql server
CREATE TABLE TestTable
(ID INT, FirstCol VARCHAR(100),
CONSTRAINT FirstCol CHECK (FirstCol NOT LIKE '%[^a-zA-Z\_-]%' ESCAPE '\'))
НРАВИТСЯ, НЕ НРАВИТСЯ. («разрешает только такие символы, как AZ, _ и -.») – jarlh
@jarlh - это двойное отрицание, потому что мы знаем символы, которые разрешаем и не хотим перечислять все символы, которые нельзя разрешить (обратите внимание на '^' внутри '[]'). Таким образом, 'НЕ НРАВИТСЯ 'здесь правильно. –
Извините, слишком рано для меня ... Не заметил ^. Но почему не просто «LIKE»% [a-zA-Z \ _-]% 'ESCAPE' \ '"? – jarlh
Вы можете использовать ограничения 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_-]%'
))
какая база данных? –
это о MS SQL 2008r2, а не mySQL! –
Какие РСУБД вы используете? SQL Server, Oracle, MySQL? –