SQL旁路REPLACE by CASE语句

时间:2015-06-11 06:51:15

标签: sql-server tsql replace case sql-server-2014

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

LOCALE
en-es
en-uk

uk-uk

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

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功能不起作用?

4 个答案:

答案 0 :(得分:6)

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

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

的原因

检查此查询

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

答案 1 :(得分:1)

您的替换功能不能替换空白区域。 试试这个

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

答案 2 :(得分:1)

这只是一种替代方法 尝试以下方法

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

答案 3 :(得分:1)

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

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