在加载到主系统表之前,对登台表中的输入数据进行数据检查。因为我想在Apex中使用相同的字段检查,所以我使用'not regexp_like'将检查作为正则表达式实现,以返回与其模式不匹配的任何字段。但是,对于强制性的10个字符字段,我期望一个模式,例如:
'^。{1,10} $'
返回任何字段为null且字段太长的字段,但不返回空字段。
是否有可以执行此操作的正则表达式模式?
示例:
/**
* Returns the name of this enum constant, exactly as declared in its
* enum declaration.
*
* <b>Most programmers should use the {@link #toString} method in
* preference to this one, as the toString method may return
* a more user-friendly name.</b> This method is designed primarily for
* use in specialized situations where correctness depends on getting the
* exact name, which will not vary from release to release.
*
* @return the name of this enum constant
*/
删除'not'会按预期返回1行...
这里的要点是强制模式找到null,而不是使用regexp_like来查找好的值然后将它们排除,或者在字段上使用NVL。这种检查已经足够昂贵了!
我假设,像大多数涉及null的Oracle代码一样,这里发生的是regexp_like看到null并因此返回null?
Java脚本和Java的行为方式是否相同?
由于
鲍勃
答案 0 :(得分:1)
如果您只需要使用零个或多个10个字符的字符串,您只需使用:
length(col) > 10 or col is null
关于NULL
,您唯一可以依赖的检查是is [not] null
。
例如:
select length(null) from dual
提供NULL
,而不是0
。
答案 1 :(得分:1)
Oracle在布尔表达式的结果中有3个状态:TRUE
,FALSE
或NULL
(未知)。
WHERE REGEXP_LIKE( NULL, '.' )
将返回NULL
而不是TRUE
或FALSE
。
将表达式否定为:
WHERE NOT REGEXP_LIKE( NULL, '.' )
还会返回NULL
而不是TRUE
或FALSE
,因为它不是TRUE
,所以永远不会返回该行。
相反,您需要明确检查NULL
值:
WHERE NOT REGEXP_LIKE( col, '^.{1,10}$' )
OR col IS NULL
或更简单地说:
WHERE LENGTH( col ) > 10
OR col IS NULL