【问题标题】:Oracle sql function: word starts with lower case 1st character, abbreviation with upperoracle sql函数:单词以小写第一个字符开头,缩写以大写
【发布时间】:2015-11-28 07:18:19
【问题描述】:

我只需要降低字符串的第一个字符

SOME_FUNCTION('Switcher USA');

让它降低:

select SOME_FUNCTION_1('Switcher USA') from dual;
sql -> switcher USA

也许存在这样的功能: http://www.techonthenet.com/oracle/functions/lower.php

同时 - 如果单词以缩写开头(连续两个或多个大写字符) - 我不希望发生任何事情:

select SOME_UPGRADE_FUNCTION('USA switcher') from dual;
sql -> USA switcher

它是干什么用的?我需要在句子中间使用这个输出字符串,如下所示:

您确定要启用开关美国吗?

不是这个:

您确定要启用 Switch USA 吗?

谢谢

【问题讨论】:

    标签: sql string oracle function plsql


    【解决方案1】:

    像这样?:

    select case when substr(text_value, 1,2) = upper(substr(text_value, 1,2)) then text_value
                else lower(substr(text_value, 1, 1)) || substr(text_value, 2)
                end
    from dual
    

    例如:

    select case when substr('USA switch', 1,2) = upper(substr('USA switch', 1,2)) then 'USA switch'
                else lower(substr('USA switch', 1, 1)) || substr('USA switch', 2)
                end
    from dual
    union all
    select case when substr('Switch USA', 1,2) = upper(substr('Switch USA', 1,2)) then 'Switch USA'
                else lower(substr('Switch USA', 1, 1)) || substr('Switch USA', 2)
                end
    from dual
    

    【讨论】:

      【解决方案2】:

      这是另一种仅使用查询的方法。它可以放入一个函数中以供重用。将前两个字母与前两个字母的大写版本进行比较。如果相同(大写),请按原样使用。如果不是,则将其小写。

      SQL> with tbl(str) as (
           select 'USA test' from dual
           union
           select 'Test USA' from dual
           union
           select 'USAs team' from dual
         )
         select
           case
             when regexp_substr(str, '^(.){2}', 1, 1) = 
                  UPPER(regexp_substr(str, '^(.){2}', 1, 1))
               THEN str
             else
               LOWER(regexp_replace(str, '^(.*)( .*)$', '\1')) || 
                     regexp_replace(str, '^(.*)( .*)$', '\2')
           end converted
         from tbl;
      
      CONVERTED
      --------------------------------------------------------------------------------
      test USA
      USA test
      USAs team
      
      SQL>
      

      【讨论】:

      猜你喜欢
      • 2021-10-05
      • 2014-02-04
      • 1970-01-01
      • 2018-05-05
      • 2020-04-22
      • 2022-01-22
      • 2011-10-09
      • 2013-12-24
      • 1970-01-01
      相关资源
      最近更新 更多