Sql server SQL旁路替换为CASE语句

Sql server SQL旁路替换为CASE语句,sql-server,tsql,replace,case,sql-server-2014,Sql Server,Tsql,Replace,Case,Sql Server 2014,我的数据中有些记录包含空行(=没有空格,没有空)。例如: 当我想选择该空行时,使用以下工具很容易: SELECT LOCALE FROM ABC WHERE LOCALE = '' 但当我尝试按如下方式替换它时,它不起作用,结果仍然是空行: SELECT REPLACE(LOCALE,'','WHY') AS 'LOCALE' FROM ABC WHERE LOCALE = '' 但是,如果我用CASE语句绕过它,它会起作用: SELECT CASE WHEN LOCALE L

我的数据中有些记录包含空行(=没有空格,没有空)。例如:

当我想选择该空行时,使用以下工具很容易:

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
函数不起作用?

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

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

检查此查询

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

“替换”功能不能替换空白。 试试这个

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

这只是另一种方法 试试下面的方法

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

我建议您使用将空字符串转换为
NULL
,然后使用(ANSI标准)将
NULL
替换为您想要的任何值,如下所示:

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

您不能替换空字符串。@wewewesthemenance我认为OP已经得到了该部分,问题是为什么不能这样做…请尝试此选择替换(“”,“,”为什么”),因为“LOCALE”是空的,所以您可以替换它。空字符串不能是“查找第一个字符串中出现的第二个字符串并替换为第三个字符串”不能“比较第一个字符串和第二个字符串,如果它们相等,则返回第三个字符串,否则返回第一个字符串”@ZoharPeled-替换空字符串很麻烦,因为空字符串可能太多。字符串
AB
中字符
A
B
之间出现了多少空字符串?(答案可以是0、1、99或任何其他你想得到的正数)这不是不可能的,这是sql server开发人员不允许的……我投票支持你的答案,因为你是目前唯一理解这个问题的人:-)请验证你发布的答案,因为当我运行时,它只显示W而不是“为什么”,因为你的列在表
ABC
中的长度是
1
SELECT COALESCE(NULLIF(LOCALE, ''),'WHY') AS 'LOCALE' 
FROM ABC 
WHERE LOCALE = ''