我的列可以包含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
语句,但希望有一个更优雅/更有效的解决方案。
当我说我已经找到解决我的具体问题并且没有找到答案时,你将不得不相信我。但是,如果我忽略了某些东西,请向我展示那条光明的道路。
答案 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 searchedCASE
expression
和COALESCE
expression is a syntactic shortcut for theCASE
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