我需要在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。
答案 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;