选择列,如果空白从另一个选择
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
【讨论】:
这是我自己得到的,但非常笨拙。 我试过了,但不知何故添加了重复的行。以上是关于选择列,如果空白从另一个选择的主要内容,如果未能解决你的问题,请参考以下文章