我如何有一个列名字,它应该只是字母表 和电话号码应该只是HSQL中的数字
我写了类似的东西ALTER TABLE USER
ADD CONSTRAINT CHECK_USER_FIRST_NAME CHECK (FIRST_NAME NOT LIKE '%[^A-Z ]%' )
但它允许我不想要的Tp1
。
有人可以帮我解决HSQL中的约束
答案 0 :(得分:1)
LIKE
不支持正则表达式。它支持的唯一通配符是%
表示多个字符,_
表示单个字符。要匹配正则表达式,您需要regexp_matches()
ALTER TABLE user
ADD CONSTRAINT check_user_first_name
CHECK (regexp_matches(first_name, '[A-Z]+'))
这将只允许使用大写字母,因此您可能希望使用'[A-Za-z]+'
。它还要求名称中至少包含一个字符。如果您想允许空字符串,请将+
更改为*
。这仍然允许空值。
请注意,USER
是SQL中的保留关键字。您不应该创建具有该名称的表。如果你试试这个,例如在Oracle或PostgreSQL上,它将失败。该名称需要引用 - 这不是一个好主意。你应该找到一个不同的名字。