在SQL中替换空值和空值

时间:2016-07-20 19:00:54

标签: sql postgresql

我有以下查询:

Select 
   impressions,
   COALESCE(u.company,u.email) AS Publisher
FROM users AS u

此处,公司字段具有公司名称或空值或空值。我不希望Publisher列有空值或空值。

上述语句适用于NULL,因为在这种情况下它返回u.email值。但它不适用于空白值。所以我试着这样做:

COALESCE(NULLIF(u.company,''),u.email)

这似乎不起作用,因为空白值不会被电子邮件替换。

有人可以指出我哪里出错吗? 还有其他选择吗?

3 个答案:

答案 0 :(得分:1)

也许这个:

COALESCE(NULLIF(u.company,u.email),u.email)

答案 1 :(得分:1)

如果我理解你说得对的话。

COALESCE按顺序计算参数,并返回最初未计算为NULL的第一个表达式的当前值。

所以这似乎是你的语句适用于NULL的原因。如果它不适用于空值,则因为如果将其作为字符串求值,则空白值在技术上仍然是一个值。

此外,如果您指的是数据库表不能具有空值或空值,则可以将表设置为不接受空值:

ALERT TABLE [表名] ALTER COLUMN [column] INTEGER NOT NULL

如果不是那种类型,显然会替换整数。这样做可以触发与数据库通信的代码中的问题,但如果没有正确编写以处理发送到数据库的空值。

要将某个列中的值替换为另一列中的值,例如将公司值替换为您可以尝试的电子邮件值。

UPDATE [table name] t
SET t.[column name] =
(SELECT [other column name from table2] FROM [table2 name] v
WHERE t.[column name] = v.[column name from table2]);

答案 2 :(得分:1)

这有点脏,但它会起作用。只需在case语句中定义要替换的每个案例(如果有人放入2或3个空格,则使用trim)。可能不是最佳解决方案

ClassInitialize