sql - 如何有条件地从串联中排除一列?
问题描述
在 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
在地址和城市之间使用这两个逗号。如果列是否为空,有没有办法动态包含列?我尝试过各种形式的合并,例如:
SELECT ADDRESS_LINE || ', ' ||
ADDRESS_LINE_2 || ', ' ||
COALESCE(ADDRESS_LINE_3 || ', ', '') ||
CITY_NAME || ', ' ||
STATE_CODE || ' ' ||
ZIP_CODE
FROM sql_test_c;
但它似乎并没有改变任何东西
解决方案
您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;
推荐阅读
- r - 根据列名/编号条件转置数据框
- node.js - Heroku Node 应用程序构建成功,但崩溃了
- oracle - win10 ADO无法访问oracle
- java - 从java中的另一个类访问方法
- java - 如果用户输入 = 变量,如何打印内容
- node.js - Mongodb通过使用相应的id获取特定值?
- python - 为什么 fbprophet 模型的 pickle 文件在硬盘上需要这么多内存?
- ssh - 如何使用 PuTTY Plink 禁用 GSSAPI 身份验证?
- html - 引导按钮使用下拉菜单在标题中显示所选项目
- php - 通过 php 将表单数据从我的网站发送到远程 http 服务器