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

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

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

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

【问题讨论】:

    标签: sql sql-server-2000


    【解决方案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
    

    【讨论】:

    • 这是我自己得到的,但非常笨拙。
    • 我试过了,但不知何故添加了重复的行。
    猜你喜欢
    • 2013-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-18
    • 2023-03-03
    相关资源
    最近更新 更多