拒绝特定字符
Deny specific chars
我需要创建一个约束或类似的东西,它只允许列中的 A-Z
、_
和 -
等字符。
如何做到这一点?
如果支持,您可以使用正则表达式约束。
使用 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 服务器
中运行良好
CREATE TABLE TestTable
(ID INT, FirstCol VARCHAR(100),
CONSTRAINT FirstCol CHECK (FirstCol NOT LIKE '%[^a-zA-Z\_-]%' ESCAPE '\'))
我需要创建一个约束或类似的东西,它只允许列中的 A-Z
、_
和 -
等字符。
如何做到这一点?
如果支持,您可以使用正则表达式约束。
使用 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 服务器
中运行良好CREATE TABLE TestTable
(ID INT, FirstCol VARCHAR(100),
CONSTRAINT FirstCol CHECK (FirstCol NOT LIKE '%[^a-zA-Z\_-]%' ESCAPE '\'))