选择列,如果空白从另一个选择

Posted

技术标签:

【中文标题】选择列,如果空白从另一个选择【英文标题】:Select column, if blank select from another 【发布时间】:2010-12-17 09:25:33 【问题描述】:

如何检测一个字段是否为空(非空),如果是则选择另一个字段?

我真正需要的是一个与 IsNull 相同但带有空格的 IsBlank 函数。

REPLACE 不适用于空格,COALESCE 仅适用于 NULLS。

【问题讨论】:

【参考方案1】:

如何结合 COALESCE 和 NULLIF。

SELECT COALESCE(NULLIF(SomeColumn,''), ReplacementColumn)
FROM SomeTable

【讨论】:

有趣...可以轻松扩展为使用 3 列吗? 回答 - 是的,你可以:COALESCE(NULLIF(Address2,''), NULLIF(Address3,''), Address4) 将答案移至您的答案,因为它比 Case 语句更优雅。 这对我有多大帮助是不真实的。【参考方案2】:

你总是可以写一个 isBlank() 函数,比如

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION isBlank
(
    @CheckExpression varchar, @ReplacementExpression varchar
)
RETURNS varchar
AS
BEGIN
    IF @CheckExpression IS NOT NULL
    BEGIN
        IF @CheckExpression='' or LEN(@CheckExpression) = 0
        RETURN @ReplacementExpression
    ELSE
        RETURN @CheckExpression
    END

    RETURN @ReplacementExpression
END
GO

【讨论】:

我假设你可以让它支持 N 个表达式,因为 COALESCE 无论如何都会通过像 Raj More 这样的 case 语句来支持。【参考方案3】:

编辑:您不能在 mssql 中使用 IF()

在 SQL 的 SELECT 部分使用 IF 语句:

SELECT IF(field1 != '', field1, field2) AS myfield FROM ...

【讨论】:

很好,但如果我需要工作超过 2 列会很痛苦。 我似乎无法正常工作:SELECT IF(Address2!='', Address2, Address3) AS Address FROM Sites 在关键字“IF”附近给出了不正确的语法。 好吧,我完全是个笨蛋,对 mysql 感到困惑。 IF() 似乎只适用于 mysql,所以不如使用上面的 CASE WHEN THEN ELSE END。我会把它留在这里作为对其他人的警告:)【参考方案4】:

您可以为此使用CASE 语句

select 
Case WHEN Column1 = '' OR Column1 IS NULL OR LEN (TRIM (Column1))  = 0 
     THEN Column2 
     ELSE Column1 END as ColumnName
from TableName

【讨论】:

这是我自己得到的,但非常笨拙。 我试过了,但不知何故添加了重复的行。

以上是关于选择列,如果空白从另一个选择的主要内容,如果未能解决你的问题,请参考以下文章

从另一个表中选择带有主键的数据?

查找 ID 列中的空白 + 选择上一个/下一个日期列

Spark数据框选择该行的任何列中至少有一个null或空白的行

从一个视图中选择数据并使用该数据从另一个视图中进行选择

从另一个查询插入记录

如何在excel里批量删除空白行列?