我有以下查询:
Select
impressions,
COALESCE(u.company,u.email) AS Publisher
FROM users AS u
此处,公司字段具有公司名称或空值或空值。我不希望Publisher列有空值或空值。
上述语句适用于NULL,因为在这种情况下它返回u.email值。但它不适用于空白值。所以我试着这样做:
COALESCE(NULLIF(u.company,''),u.email)
这似乎不起作用,因为空白值不会被电子邮件替换。
有人可以指出我哪里出错吗? 还有其他选择吗?
答案 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