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 COALESCE(ANSI标准)将NULL
替换为任何值你想要的,在下面:
SELECT COALESCE(NULLIF(LOCALE, ''),'WHY') AS 'LOCALE'
FROM ABC
WHERE LOCALE = ''
我的数据中有些记录包含空白行(=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 COALESCE(ANSI标准)将NULL
替换为任何值你想要的,在下面:
SELECT COALESCE(NULLIF(LOCALE, ''),'WHY') AS 'LOCALE'
FROM ABC
WHERE LOCALE = ''