20

我有一列可以有任何一个NULL或空白(即'')值。我想将这两个值都替换为有效值,例如'UNKNOWN'. 我发现的各种解决方案都建议修改表本身的值。但是,在这种情况下,这不是一个选项,因为数据库是用于开发和/或修补非常差的第 3 方应用程序(实际上我认为我的罗威纳犬本可以做得更好)。我担心修改底层数据可能会导致应用程序陷入困境。

我尝试了以下命令的变体:

COALESCE(Address.COUNTRY, 'United States') -- Won't replace empty string as it is not NULL
REPLACE(Address.COUNTRY, '', 'United States') -- Doesn't replace empty string
ISNULL(Address.COUNTRY, 'United States') -- Works for NULL but not empty string

我知道我可以使用该CASE语句,但希望有一个更优雅/高效的解决方案。

当我说我已经为我的特定问题寻找解决方案但没有找到答案时,你必须相信我。但是,如果我忽略了某些事情,请告诉我光明的道路。

4

4 回答 4

71

尝试这个

COALESCE(NULLIF(Address.COUNTRY,''), 'United States')
于 2013-06-21T21:50:25.207 回答
5

听起来您想要一个视图而不是更改实际的表数据。

Coalesce(NullIf(rtrim(Address.Country),''),'United States')

如果它实际上是一个空字符串(或空白字符串),这将强制您的列为空,然后合并将有一个空值可以使用。

于 2013-06-21T21:50:47.463 回答
3

另一种方法可以是: - 建议只使用一个表达式 -

case when address.country <> '' then address.country
else 'United States'
end as country

注意:操作员检查null的结果<>将返回false
并且如文档所述:NULLIF相当于搜索的CASE表达式
,而COALESCE表达式是表达式的语法快捷CASE方式
因此,它们的组合使用了两次case表达。

于 2017-09-12T12:28:39.957 回答
1

对于表中的示例数据,例如

'',null以及actual value如果您只想按符号替换actual value和值而不是执行此查询'' null#

SELECT Column_Name = (CASE WHEN (Column_Name IS NULL OR Column_Name = '') THEN '#' ELSE Column_Name END) FROM Table_Name

还有另一种你可以使用它的方式,但这有点冗长,而不是这个你也可以使用IsNull函数,但这里只有我提到IIF函数

SELECT IIF(Column_Name IS NULL, '#', Column_Name) FROM Table_Name  
SELECT IIF(Column_Name  = '', '#', Column_Name) FROM Table_Name  
-- and syntax of this query
SELECT IIF(Column_Name IS NULL, 'True Value', 'False Value') FROM Table_Name
于 2019-10-02T06:35:02.953 回答