拒绝特定的字符

时间:2015-05-07 06:39:47

标签: sql sql-server tsql sql-server-2008-r2

我需要创建一个约束或类似的约束,它只允许列中的A-Z_-等字符。

如何做到这一点?

2 个答案:

答案 0 :(得分:5)

try this..It Work Fine In ms sql server

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

答案 1 :(得分:0)

如果支持,则可以使用正则表达式约束。

使用 PostgreSQL 的示例如下所示:

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

请注意,此正则表达式允许空字符串,不允许使用小写字符。

否则(在 MySQL 的情况下)你可以使用insert-trigger:

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_-]%'
))