查询以限制String字段,而不包含在其之前或之后的数值

时间:2016-10-17 10:26:27

标签: sql oracle

我需要在oracle中编写一个查询,在一个字段中限制下面的字符串值,除非在它之前或之后有一个数字字符串

"Department of" ,"Dept. of", "Dept Of"

例如,我希望查询拒绝"Department of""Dept. of""Dept Of"甚至"ABC Department of'之类的值不应该被考虑但是它可以在数字时接受这些值字符串存在。例如,不应限制"Department of 1234""Dept. of 4567""2134 Dept. of"或" 9864 Department of"

我正在考虑使用REGEXP函数但是我无法提出查询来处理可能在字符串值之前或之后的NUMERIC的情况

我没有数据,其中数字值位于字符串( "Dept. 21 of" )之间,因此不需要考虑这种情况。如果列中存在数字将导致无法解决,因为该表具有包含数字和数据的其他记录除了"部门" "系。 of"," Dept Of"。

TIA。

2 个答案:

答案 0 :(得分:1)

您想使用regexp_like()

where regexp_like(col, '[0-9] +(Dept. of|Department of|Dept Of)') or
      regexp_like(col, '(Dept. of|Department of|Dept Of)') +[0-9])

您可以将这些转换为一个正则表达式,但我认为两个更容易表达。

答案 1 :(得分:0)

您可以查看使用REGEXP,但是,使用子字符串组件检查您要搜索的字符串中的第一个(或最后一个)值;

https://docs.oracle.com/cd/B14117_01/server.101/b10759/functions116.htm

e.g;

SELECT REGEXP_SUBSTR('2134 Dept. of',[0-9],1) "NumberPreOrPost" FROM DUAL;