我对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 '='.
答案 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