字母和数字的HSQL查询约束

时间:2015-11-14 04:02:17

标签: sql hsqldb check-constraints

我如何有一个列名字,它应该只是字母表 和电话号码应该只是HSQL中的数字

我写了类似

的东西
ALTER TABLE USER 
ADD CONSTRAINT CHECK_USER_FIRST_NAME CHECK (FIRST_NAME  NOT LIKE '%[^A-Z ]%' )

但它允许我不想要的Tp1。 有人可以帮我解决HSQL中的约束

1 个答案:

答案 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上,它将失败。该名称需要引用 - 这不是一个好主意。你应该找到一个不同的名字。