我想知道是否有人能帮我解决这个问题。
我有一个表,其中包含用于名字和姓氏的独立列。我想要查询所有名字的小写字母后连字符,无论是名字,姓氏,或两者。
甲骨文里有什么东西可以让我在没有暴力的情况下做这件事吗?比如使用SUBSTR和引用Char?('-')
现在我只有这么慢的烂摊子:
select FIRST_NAME, LAST_NAME
from myTABLE
where FIRST_NAME in (('%-a%'), ('%-b%'), ('%-c%'), ('%-d%'),('%-e%'), ('%-f%'), ('%-g%'), ('%-h%'), ('%-i%'),('%-j%'),('%-k%'), ('%-l%'), ('%-m%'), ('%-n%'),('%-o%'),('%-p%'),('%-q%'),('%-r%'),('%-s%'),('%-t%'), ('%-u%'), ('%-v%'),('%-w%'),('%-x%'),('%-y%'),('%-z%') )
or LAST_NAME in (('%-a%'), ('%-b%'), ('%-c%'), ('%-d%'),('%-e%'), ('%-f%'), ('%-g%'), ('%-h%'), ('%-i%'),('%-j%'),('%-k%'), ('%-l%'), ('%-m%'), ('%-n%'),('%-o%'),('%-p%'),('%-q%'),('%-r%'),('%-s%'),('%-t%'), ('%-u%'), ('%-v%'),('%-w%'),('%-x%'),('%-y%'),('%-z%') ) 发布于 2014-08-04 16:30:37
试试这个:
with t(firstname, lastname) as (
select 'firstname1with-lowercase', 'lastname1with-lowercase' from dual union all
select 'firstname2with-Uppercase', 'lastname1with-lowercase'from dual union all
select 'firstname3with-lowercase', 'lastname1with-Uppercase'from dual union all
select 'firstname4with-Uppercase', 'lastname1with-Uppercase'from dual
)
select t.*
, case
when REGEXP_LIKE(firstname, '\-[a-z]') and REGEXP_LIKE(lastname, '\-[a-z]') then 'by firstname and lastname'
when REGEXP_LIKE(firstname, '\-[a-z]') then 'by firstname'
else 'by lastname'
end condition
from t
where REGEXP_LIKE(firstname, '\-[a-z]')
or REGEXP_LIKE(lastname, '\-[a-z]')
FIRSTNAME LASTNAME CONDITION
---------------------------------------------------------------------------------
firstname1with-lowercase lastname1with-lowercase by firstname and lastname
firstname2with-Uppercase lastname1with-lowercase by lastname
firstname3with-lowercase lastname1with-Uppercase by firstname因此,[a-z]的意思是,我需要在a之间的字符的一个,如果你使用一些特殊的符号,比如,或其他符号,你必须使用[a-zåäö]。如果要添加大写字母,必须使用[a-zåäöA-ZÄÖÅ] (您可以自己添加数字或特殊符号)。\-的意思是我在寻找单词中的连字符。我不能只使用连字符,我必须用反斜杠符号来转义它。
因此,所显示的正则表达式是一个掩码,用于搜索连字符和小写字符在连字符后面的单词。
您可以在oracle中阅读更多关于正则表达式及其支持的内容。
https://stackoverflow.com/questions/25123255
复制相似问题