查询翻转Alphabets的情况

时间:2014-01-27 05:37:53

标签: sql oracle

编写一个查询以接受4个字符示例-aBcD并将其从大写格式转换为小写格式,然后从大写字母转换为大写格式,即AbCd格式,您可以使用ASCII字符函数但是您不能使用任何PL / SQL代码,它应该是只有一个SQL查询

1 个答案:

答案 0 :(得分:2)

   with letters as
    (
    select 
           substr('MaHeSh',level,1) as letter,level row_label
    FROM dual
    connect by level<= length('MaHeSh')
    )
    select 
           listagg(
           case when ascii(letter) between ascii('a') and ascii('z') then
           upper(letter)
           else
           lower(letter)
           end,'') within group ( order by row_label) as flipped
    from
    letters

<强>结果

FLIPPED

mAhEsH

<强>工作

我们将单词拆分为字母,并使用substr()函数将其转换为行

SUBSTR('Mahesh',2,1) = 'a'提取第二个字母。使用connect by,我们生成等于单词长度的虚拟行,并像下面一样逐字母地提取。之后做相应的ascii检查和翻盖。 LISTAGG将所有字母再次分组为一个单词。

生成的视图(行标签是为了保留字母的顺序)

LETTER  ROW_LABEL
M   1
a   2
H   3
e   4
S   5
h   6