繁体   English   中英

在SQL中替换空值和空值

[英]Replace blank and null values in SQL

我有以下查询:

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

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

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

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

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

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

也许这个:

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

如果我理解你正确说的话。

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]);

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

case when u.company is null then u.email 
     when trim(u.company) = '' then u.email 
else u.company 
end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM