PostgreSQL:根据哪个为空,选择两个字段之一

Posted

技术标签:

【中文标题】PostgreSQL:根据哪个为空,选择两个字段之一【英文标题】:PostgreSQL: Select one of two fields depending on which is empty 【发布时间】:2012-11-23 06:47:23 【问题描述】:

您好,我有一个查询,我想根据其中一个字段是否为空来选择两个字段之一的值。

field1 and field2

我想将它们选为complete_field

IF field1 is empty, then complete_field is field2
ELSE complete_field is field1

php 中会这样:

$complete_field = $field1 == '' ? $field2 : $field1;

我将如何在 PostgreSQL 中执行此操作?

我试过了:

SELECT
(IF field1 = '' THEN field2 ELSE field1) AS complete_field
FROM
table

但它不起作用。

请帮助我 :) 谢谢

【问题讨论】:

如果字段为 NULL,SELECT COALESCE(field1, field2) AS the_field FROM my_table; 将起作用。它们真的是空字符串而不是 NULL 吗? 【参考方案1】:

使用CASE WHEN .. THEN .. ELSE .. END,例如:

SELECT 
(CASE WHEN (field1 IS NULL OR field1 = '') THEN field2 ELSE field1 END)
FROM table;

查看the official docs。

【讨论】:

【参考方案2】:

试试COALESCENULLIF

SELECT COALESCE(NULLIF(field1, ''), field2) AS the_field FROM my_table;

【讨论】:

【参考方案3】:

ANSI SQL 函数 Coalesce() 是你想要的。

 select Coalesce(field1,field2)
 from   table;

【讨论】:

显然field1 可能是一个空字符串,在这种情况下,OP 不需要它的值,而是需要field2 的值。 呃。最近从 Oracle 转换而来,我不喜欢这个空字符串不为空的问题。

以上是关于PostgreSQL:根据哪个为空,选择两个字段之一的主要内容,如果未能解决你的问题,请参考以下文章

根据可以具有值或为空的字段选择组内的行

postgresql哪个语句可以改变字段名的类型?alert table 表名 alter column 字段名 字段类型 这个是不行的

MySQL与PostgreSQL比较 哪个数据库更好

jQuery下拉框,不能使字段值为空

postgresql 判断字段是不是为空 空给默认值 否则取该字段是啥函数来着?

皕杰报表之填报操作