SQL 绕过 REPLACE by CASE 语句

SQL bypass REPLACE by CASE statement

我的数据中有些记录包含空白行(=no space,no NULL)。例如:

LOCALE
en-es
en-uk

uk-uk

当我想要 select 那个空白行时,很容易:

SELECT LOCALE
FROM ABC
WHERE LOCALE = ''

但是当我尝试如下替换时,还是不行,结果还是空行:

SELECT REPLACE(LOCALE,'','WHY') AS 'LOCALE'
FROM ABC
WHERE LOCALE = ''

但是如果我用 CASE 语句绕过它,它会起作用:

SELECT CASE
       WHEN LOCALE LIKE '' THEN 'WHY'
       ELSE LOCALE
       END AS 'LOCALE'
FROM ABC
WHERE LOCALE = ''

这里有什么问题?为什么 REPLACE 功能不起作用?

很明显,''表示空白(Not null),它也存在于两个连续的字母之间。 (因为它是空白的)

所以Sql不能继续用你想要的字符串替换每个字母之间的that空白。这就是为什么你不能替换 ''

检查此查询

SELECT ISNULL(NULLIF(LOCALE, ''),'WHY') AS [LOCALE]
FROM ABC
WHERE LOCALE = ''

您的替换函数不替换空白 space。 试试这个

SELECT REPLACE(isnull(ITEM,''),' ','WHY') AS 'LOCALE'
FROM Table1
WHERE ITEM = ''

这只是一个替代方法 试试下面的方法

select COALESCE(NULLIF('',''), 'WHY' AS 'LOCALE'
FROM ABC
WHERE LOCALE = ''

我建议你使用NULLIF to convert empty string to NULL, after It to use COALESCEA​​NSI标准)将NULL替换为任何值你想要的,在下面:

SELECT COALESCE(NULLIF(LOCALE, ''),'WHY') AS 'LOCALE' 
FROM ABC 
WHERE LOCALE = ''