我有以下参考数据.
PERSON_NAME STREET TOWN COUNTY POSTCODE
------------------------------ ------------------------ ---------------- ---------------- ----------
David Smith 30 Johnson Street Norwich Norfolk NA38 3KL
John Brown Douglas Road Cambridge C8 9IJ
Jackie White 8 High Street Ipswich Suffolk IP7 2YT
Andrea Blue 9 Marlborough Ave Bury Suffolk IP4 0XC
Jemima Green Riverside Walk Colchester Essex CO6 7PR
James Gray 167 Hadleigh Place London SW1 4TU
Run Code Online (Sandbox Code Playgroud)
我想要做的是显示一个人名列表,以及他们的地址连接成一个逗号分隔的字符串.
这部分很简单,我用了||连接列并放置逗号分隔符.
我正在质疑的部分是,有些行没有列出任何内容COUNTY,因此我需要避免显示, ,.
我已经为自己做了一些研究,并决定使用Oracle中的SUBSTR替换双逗号,但它确实感觉有点"脏".是否有更简洁的方法来避免使用复杂的功能(例如之前的SO问题)?
这就是我所拥有的:
SELECT
SUPPNAME as "Supplier Name",
REPLACE(STREET || ', ' || TOWN || ', ' || COUNTY || ', ' || POSTCODE, ' ,','') as "Supplier Address"
FROM
SUPPLIERS
;
Run Code Online (Sandbox Code Playgroud)
谢谢
尝试
SELECT
SUPPNAME AS "Supplier Name",
(
CASE WHEN STREET IS NULL THEN '' ELSE STREET || ', ' END ||
CASE WHEN TOWN IS NULL THEN '' ELSE TOWN || ', ' END ||
CASE WHEN COUNTY IS NULL THEN '' ELSE COUNTY || ', ' END ||
CASE WHEN POSTCODE IS NULL THEN '' ELSE POSTCODE END
) AS "Supplier Address"
FROM SUPPLIERS
Run Code Online (Sandbox Code Playgroud)
在先前的答案中,如果所有fiields为NULL,那么您只会得到愚蠢的','而不是预期的NULL。尝试这种方法以在结果开始时删除一个额外的','
SELECT
SUPPNAME AS "Supplier Name",
SUBSTR(
NVL2(STREET, ', ' || STREET, NULL)
|| NVL2(TOWN, ', ' || TOWN, NULL)
|| NVL2(COUNTY, ', ' || COUNTY, NULL)
|| NVL2(POSTCODE, ', ' || POSTCODE, NULL)
,2) AS "Supplier Address"
FROM SUPPLIERS
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7996 次 |
| 最近记录: |