SQL旁路REPLACE by CASE语句

DNa*_*Nac 5 t-sql sql-server replace case sql-server-2014

我有一些数据,其中一些记录包含空行(=没有空格,没有NULL).例如:

LOCALE
en-es
en-uk

uk-uk
Run Code Online (Sandbox Code Playgroud)

当我想选择那个空行时,它很容易:

SELECT LOCALE
FROM ABC
WHERE LOCALE = ''
Run Code Online (Sandbox Code Playgroud)

但是当我尝试按如下方式替换它时,它不起作用,结果仍然是空白行:

SELECT REPLACE(LOCALE,'','WHY') AS 'LOCALE'
FROM ABC
WHERE LOCALE = ''
Run Code Online (Sandbox Code Playgroud)

但如果我用CASE声明绕过它,它的作用是:

SELECT CASE
       WHEN LOCALE LIKE '' THEN 'WHY'
       ELSE LOCALE
       END AS 'LOCALE'
FROM ABC
WHERE LOCALE = ''
Run Code Online (Sandbox Code Playgroud)

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

Pra*_*ukh 6

很明显,这''意味着空白(非空)并且它也存在于两个连续的字母之间.(因为它是空白的)

因此SQL不能去代替那个与你想要的字符串中的每个字母之间的空白.这就是你不能替换的原因''

检查此查询

SELECT ISNULL(NULLIF(LOCALE, ''),'WHY') AS [LOCALE]
FROM ABC
WHERE LOCALE = ''
Run Code Online (Sandbox Code Playgroud)