在Oracle SQL中,我试图从看起来像这样的几个字段中串联一个地址
CREATE TABLE sql_test_c
(
ADDRESS_LINE varchar(255),
ADDRESS_LINE_2 varchar(255),
ADDRESS_LINE_3 varchar(255),
CITY_NAME varchar(255),
STATE_CODE varchar(255),
ZIP_CODE varchar(255)
);
INSERT INTO sql_test_c (ADDRESS_LINE, ADDRESS_LINE_2, CITY_NAME, STATE_CODE, ZIP_CODE) VALUES ('Business Name', '123 Main Street', 'Seattle', 'WA', '12345');
不幸的是,在我的数据集中,ADDRESS_LINE_3中有很多地址没有任何地址(像这样),所以当我使用
SELECT ADDRESS_LINE || ', ' ||
ADDRESS_LINE_2 || ', ' ||
ADDRESS_LINE_3 || ', ' ||
CITY_NAME || ', ' ||
STATE_CODE || ' ' ||
ZIP_CODE
FROM sql_test_c;
我最终得到
Business Name, 123 Main Street, , Seattle, WA 12345
在地址和城市之间使用这两个逗号。是否可以动态包含列(如果它们为null或不为null)?我已经尝试过各种形式的合并,例如:
SELECT ADDRESS_LINE || ', ' ||
ADDRESS_LINE_2 || ', ' ||
COALESCE(ADDRESS_LINE_3 || ', ', '') ||
CITY_NAME || ', ' ||
STATE_CODE || ' ' ||
ZIP_CODE
FROM sql_test_c;
但是它似乎并没有改变
答案 0 :(得分:3)
您的coalesce()
不起作用,因为Oracle使用NULL
运算符将||
视为空字符串。
您可以使用case
解决此问题:
SELECT ADDRESS_LINE || ', ' ||
ADDRESS_LINE_2 || ', ' ||
(CASE WHEN ADDRESS_LINE_3 IS NOT NULL THEN ADDRESS_LINE_3 || ', ' END) ||
CITY_NAME || ', ' ||
STATE_CODE || ' ' ||
ZIP_CODE
FROM sql_test_c;