Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 检查约束中的正则表达式:不接受数字_Sql_Regex_Oracle_Oracle11g - Fatal编程技术网

Sql 检查约束中的正则表达式:不接受数字

Sql 检查约束中的正则表达式:不接受数字,sql,regex,oracle,oracle11g,Sql,Regex,Oracle,Oracle11g,如何在customers表中的first_name(varchar2(20))列上添加约束,以使插入该列的值不包含数字 我想我已经找到了可能的解决办法: ALTER TABLE customers ADD CONSTRAINT first_name_check CHECK (REGEXP_LIKE(first_name,'^[[:alpha:][:blank:][:cntrl:][:punct:]]+$')) NOVALIDATE; 此外: 然而,有没有更好的方法呢?不使用所有这些字符类,

如何在customers表中的first_name(varchar2(20))列上添加约束,以使插入该列的值不包含数字

我想我已经找到了可能的解决办法:

ALTER TABLE customers

ADD CONSTRAINT first_name_check

CHECK (REGEXP_LIKE(first_name,'^[[:alpha:][:blank:][:cntrl:][:punct:]]+$')) NOVALIDATE;
此外:

然而,有没有更好的方法呢?不使用所有这些字符类,在REGEXP_之前不使用“NOT”

我认为这会奏效:

ALTER TABLE customers

ADD CONSTRAINT first_name_check

CHECK (NOT REGEXP_LIKE(first_name,'^[^[:digit:]]+$')) NOVALIDATE;

但我错了。你能解释一下原因吗?

你上一个regexp似乎不太正确<代码>^[^[:digit:]+$应该匹配任何不是由数字组成的字符串,但随后您可以反转检查

要么去掉
NOT
,要么再尝试一个类似的方法:
[$.*[:digit::*.*.^]
以匹配任意字符序列,一个数字,然后是任意字符序列


.

您的上一个regexp似乎不太正确<代码>^[^[:digit:]+$应该匹配任何不是由数字组成的字符串,但随后您可以反转检查

要么去掉
NOT
,要么再尝试一个类似的方法:
[$.*[:digit::*.*.^]
以匹配任意字符序列,一个数字,然后是任意字符序列

.

关于这一限制,“有没有更好的方法?”

CHECK (NOT REGEXP_LIKE(first_name,'[[:digit:]]'))
这是一个主观的问题,所以这里有一个主观的答案:我不这么认为。它可以完成任务,字符集安全,并且易于阅读(对于正则表达式)。

关于此约束的问题“有没有更好的方法?”

CHECK (NOT REGEXP_LIKE(first_name,'[[:digit:]]'))

这是一个主观的问题,所以这里有一个主观的答案:我不这么认为。它完成了任务,字符集安全,而且很容易阅读(对于正则表达式)。

我太困惑了!首先,我恐怕我的问题构造得不好。我想拒绝任何包含一个或多个数字的字符串。例如:“ab.d$”可以,但应拒绝“a9b”或“9ab”或“ab12”。现在,让我们来看看我的想法:<代码> ^ [^::数字:] + $ < /代码>不<代码> [FoBaa] < /Cord>意思是“任何但不是FoBar”?因此,
[^[:digit:][]
的意思不是“除了
[:digit:][/code>之外的任何东西”吗?最后,看看你的想法:
[$.[:digit:].*.^]
难道它不意味着:任何包括美元符号、点或星号、任何数字或点(重复)或星号(重复)或^的东西吗?我太困惑了!首先,我恐怕我的问题构造得不好。我想拒绝任何包含一个或多个数字的字符串。例如:“ab.d$”可以,但应拒绝“a9b”或“9ab”或“ab12”。现在,让我们来看看我的想法:<代码> ^ [^::数字:] + $ < /代码>不<代码> [FoBaa] < /Cord>意思是“任何但不是FoBar”?因此,
[^[:digit:][]
的意思不是“除了
[:digit:][/code>之外的任何东西”吗?最后,看看你的想法:
[$.[:digit::].*.^]
难道它不意味着:任何包括美元符号、点或星号或任何数字或点(重复)或星号(重复)或^?