在Select语句中替换NULL和空字符串

时间:2013-06-21 21:47:30

标签: sql tsql

我的列可以包含NULL或空格(即'')值。我想用'UNKNOWN'之类的有效值替换这两个值。我发现的各种解决方案建议修改表格本身的值。但是,在这种情况下,这不是一个选项,因为数据库是针对第三方应用程序开发和/或打补得很差(实际上我认为我的罗威纳犬可以做得更好)。我担心修改基础数据可能会导致应用程序陷入吸烟之中。

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

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 个答案:

答案 0 :(得分:54)

试试这个

COALESCE(NULLIF(Address.COUNTRY,''), 'United States')

答案 1 :(得分:5)

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

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

如果它实际上是一个空字符串(或空字符串),那么这将强制您的列为null,然后coalesce将使用null。

答案 2 :(得分:1)

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

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

注意:null运营商检查<>的结果将返回false   记录在案:NULLIF is equivalent to a searched CASE expression
  和COALESCE expression is a syntactic shortcut for the CASE expression   因此,这些组合使用两次case表达式。

答案 3 :(得分:0)

例如,表中的数据,例如的组合

''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