如何在某些条件下重命名查询结果

时间:2019-02-04 14:40:07

标签: sql oracle

作为查询的结果,我在列中有3个值。我需要缩写并返回列值。例如。说我的结果是 世界贸易中心 我需要将其打印为WTC

4 个答案:

答案 0 :(得分:0)

您可以为此使用case表达式:

select (case when col = 'World Trade Center' then 'WTC'
             . . .
         end) as abbrev

实际上,对这样的需求表明您想要一个实体的引用表。您可能会发现多个查询最终会做同一件事-然后,如果添加第四个值,则需要更改许多代码。

答案 1 :(得分:0)

这就是我为您准备的内容,它在SQL Server上可以正常工作,如果您使用其他任何方法,也许您必须更改一些细微的事情,但这并不那么困难。 记住要更改VARCHAR大小以适合数据库的列。

DECLARE @return VARCHAR(30)
DECLARE @loop INT
DECLARE @myString VARCHAR(30)

SET @return = '' -- The variable that will be returned
SET @myString = 'World Trade Center' -- Your original value
SET @loop = LEN(@myString) - LEN(REPLACE(@myString,' ','')) + 1 -- Calculate the    nombre of spaces to know how many times to loop

DECLARE @count INT = 1;

WHILE @count <= @loop -- While u haven't parsed all words of the original string
BEGIN
   SET @return = SUBSTRING(PARSENAME(REPLACE(@myString, ' ', '.'), @count), 1, 1) + @return -- Add the first letter of each word to the return variable
   SET @count = @count + 1;
END;

SELECT @return -- And there you got 'WTC', you can use it as you want
  

将每个单词的第一个字母添加到@return可能看起来很奇怪,因为它看起来像是按相反的顺序添加字母,但实际上至少在SQL Server上这样可以正常工作

答案 2 :(得分:0)

一些正则表达式怎么样?

SQL> with test (col) as
  2    (select 'World Trade Centre ' from dual union all
  3     select 'Additional Voluntary Contribution' from dual union all
  4     select 'Executive Pension Plan' from dual union all
  5     select 'Money Purchase Plan' from dual
  6    )
  7  select
  8    col,
  9    listagg(substr(regexp_substr(col, '\w+', 1, column_value), 1, 1), '')
 10      within group (order by column_value) result
 11  from test,
 12       table(cast(multiset(select level from dual
 13                           connect by level <= regexp_count(col, ' ') + 1
 14                          ) as sys.odcinumberlist))
 15  group by col;

COL                               RESULT
--------------------------------- ----------
Additional Voluntary Contribution AVC
Executive Pension Plan            EPP
Money Purchase Plan               MPP
World Trade Centre                WTC

SQL>

它有什么作用?

  • 将每个字符串分成几行(第9行中的REGEXP_SUBSTR就是这样)
  • 选择每个子字符串的第一个字母(这就是第9行中的SUBSTR的作用)
  • 将第一个字母汇总到结果中(LISTAGG就是这样)

答案 3 :(得分:0)

我不确定较早前出了什么问题,现在又做了什么。但是我已经尝试使用Case Expression,现在它可以工作了。 谢谢大家的投入。