Oracle SQL - 是否有更好的方法将多个字符串与给定的分隔符连接起来?

时间:2014-09-19 03:40:13

标签: sql string oracle concatenation oracle-sqldeveloper

第一个问题,如果这是愚蠢的或非原创的,请提前道歉,但我现在已经搜索了大约30分钟而没有在我的确切问题的任何地方找到任何提及:

有没有办法连接一系列字符串,由给定的分隔符分隔,而不需要在每个连接的列之间手动设置分隔符?

举一个具体的例子,我目前有这个:

SELECT member_no as Member#,
(member_gname
|| ' '
|| member_fname) as Name,
(member_street
|| ' '
|| member_city
|| ' '
|| member_state
|| ' '
|| member_postcode) AS Address,
member_phone AS Phone,
TO_CHAR(member_joindate, 'dd-Mon-yyyy') as Joined
FROM MEMBER;

它工作正常,并产生我想要的输出,但由于这是用于研究,我不太关心输出,更关心可读性和最佳实践' .sql文件本身的因素。我知道CONCAT()只接受两个参数,因此在没有嵌套的情况下不会工作(这甚至更丑陋,更不易读)。我在这里完全天真地进来,但我希望它能成为某种神奇的AWESOMECONCAT()类型的函数,它将占用我需要的所有列,并允许我指定我的角色想要分开它们(在这种情况下,是一个空间)。有什么想法吗?

此外,这是一个单独的问题,不值得单独发布,但有没有办法选择一个列' AS'并给它一个包括空格的名字?例如#'会员#'看起来会更好imo,并且加入日期'会更清楚,但我在AS之后尝试了括号和单引号,似乎没有与SQL开发人员一起使用。

2 个答案:

答案 0 :(得分:2)

我们仍然可以编写自己的AWESOMECONCAT()。不幸的是,Oracle没有内置功能。由于连接运算符执行基本操作。

在别名中使用双引号,可以使列引用区分大小写,甚至接受空白。但请注意,对该列/表达式的任何更多引用都需要带有相同文本的双引号。

SELECT member_no as "Member #",
(member_gname
|| ' '
|| member_fname) as Name,
(member_street
|| ' '
|| member_city
|| ' '
|| member_state
|| ' '
|| member_postcode) AS Address,
member_phone AS Phone,
TO_CHAR(member_joindate, 'dd-Mon-yyyy') as "Join Date"
FROM MEMBER;

答案 1 :(得分:0)

  

有没有办法连接一系列字符串,由给定的分隔符分隔,而不需要在每个连接的列之间手动设置分隔符?

从11g开始连接的最佳方法是新的字符串文字技术q'[]'

例如:

select q'[This is a string, 'this is also a string'.]' from dual