处理空,空格和空值

时间:2014-07-02 13:30:35

标签: sql-server sql-server-2008

我对sql server有点疑问 我的表emp包含像

这样的数据
id, name
1,abc
2,
3,n
4,ja
5, jied
6,null

要用9999替换null或empty并避免空格我尝试查询如下

select coalesce(ltrim(rtrim(substring(name,1,5))) ,'') ='' then '9999' 
else substring(ltrim(rtrim(name),1,5) end name
FROM emp

我没有得到结果,但显示以下错误

Msg 102, Level 15, State 1, Line 2
Incorrect syntax near '='.

3 个答案:

答案 0 :(得分:1)

您遗漏了代码中的一些元素:您需要添加CASE WHEN,例如

SELECT 
    CASE 
        WHEN coalesce(ltrim(rtrim(substring(name,1,5))) ,'') ='' 
        THEN '9999' 
        ELSE substring(ltrim(rtrim(name)),1,5)
    END name
FROM emp

我还建议你使用ISNULL和NULLIF函数来研究几种不同的方法。例如,您可以使用ISNULL(NULLIF(LTRIM(RTRIM(name)), ''), '9999'),它将在单个语句中过滤掉NULL值和空值。

编辑:我不太了解你的数据,我也有点担心你的两个SUBSTRING()函数正在做不同的事情。在WHEN子句中,对LTRIM()函数返回的五个字符运行RTRIM()SUBSTRING()函数,从理论上返回少于五个字符。但是,在ELSE子句中,您针对已裁剪的名称结果运行SUBSTRING()

例如,请查看以下两个查询之间的区别:

SELECT LTRIM(RTRIM(SUBSTRING(' blank space here', 1, 5)))
SELECT SUBSTRING(LTRIM(RTRIM(' blank space here')), 1, 5)

如果您确实需要将此限制为五个字符,那么您应该在名称之前修改,然后应用SUBSTRING()函数,即

SELECT ISNULL(NULLIF(SUBSTRING(LTRIM(RTRIM(Name)), 1,5), ''), '9999')
FROM  emp

答案 1 :(得分:0)

CASE WHEN ELSE 部分

错过了)
SELECT CASE WHEN COALESCE(SUBSTRING(LTRIM(RTRIM(name)),1,5) ,'') = '' THEN '9999' 
ELSE SUBSTRING(LTRIM(RTRIM(name)),1,5) END name
FROM emp

答案 2 :(得分:0)

如果你想获得' 9999'当名称为null或为空时,您也可以使用以下查询,只是除上述答案之外的其他选项

SELECT COALESCE(NULLIF(LTRIM(RTRIM(name)),''),'9999') FROM emp