首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >确定在Oracle SQL中Hyphen是小写后的字符

确定在Oracle SQL中Hyphen是小写后的字符
EN

Stack Overflow用户
提问于 2014-08-04 16:24:55
回答 1查看 401关注 0票数 0

我想知道是否有人能帮我解决这个问题。

我有一个表,其中包含用于名字和姓氏的独立列。我想要查询所有名字的小写字母后连字符,无论是名字,姓氏,或两者。

甲骨文里有什么东西可以让我在没有暴力的情况下做这件事吗?比如使用SUBSTR和引用Char?('-')

现在我只有这么慢的烂摊子:

代码语言:javascript
复制
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%') ) 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-04 16:30:37

试试这个:

代码语言:javascript
复制
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中阅读更多关于正则表达式及其支持的内容。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25123255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档