Sql server 2008 如何处理空字符串,就像使用isnull()可以为空一样?
我在SQL Server中解析字符串时遇到了小问题 我有一张这样的桌子: 电磁脉冲 基于此表数据,我想输出如下结果:Sql server 2008 如何处理空字符串,就像使用isnull()可以为空一样?,sql-server-2008,sql-server-2012,Sql Server 2008,Sql Server 2012,我在SQL Server中解析字符串时遇到了小问题 我有一张这样的桌子: 电磁脉冲 基于此表数据,我想输出如下结果: sn | code | Changed | sal 1 | 1100F | NA | 100 2 | 0 | NA | 200 3 | 97535 | GO | 300 4 | 97530 | GO |300 5 | 0 | NA |600 6 |983
sn | code | Changed | sal
1 | 1100F | NA | 100
2 | 0 | NA | 200
3 | 97535 | GO | 300
4 | 97530 | GO |300
5 | 0 | NA |600
6 |9830 | NA |200
更改后的列应该包含-,后面的code列中的所有内容,在-,后面没有任何内容,或者没有-,我应该使用NA
我目前的代码是:
select
sn,
code,
sal case WHEN CHARINDEX('-',code)>0
THEN SUBSTRING(code,CHARINDEX('-',code)+1,len(code))
ELSE 'NA' END changed
from emp
我遇到的问题是,对于第一行,我得到的是一个空字符串而不是NA,是否有人可以帮助更改它,以便在没有代码的情况下,它显示NA?这正是您想要的,但我不完全满意,因为重复:
select
sn,
case when charindex('-', code) > 0
then
case substring(code, charindex('-', code) + 1, len(code))
when '' then 'NA'
else substring(code, charindex('-', code) + 1, len(code))
end
else 'NA'
end
from emp
但是额外的嵌套大小写将确保空代码具有“NA”
为此定义标量值函数并使用一些变量可能更有意义,例如:
create function GetChanged(@code varchar(10)) returns varchar(10)
as
begin
declare @result varchar(10) = 'NA';
declare @dashIndex int = charindex('-', @code);
if (@dashIndex > 0)
begin
declare @changed varchar(10) = substring(@code, @dashIndex + 1, len(@code))
if (@changed != '')
set @result = @changed;
end;
return @result;
end;
create function GetChanged(@code varchar(10)) returns varchar(10)
as
begin
declare @result varchar(10) = 'NA';
declare @dashIndex int = charindex('-', @code);
if (@dashIndex > 0)
begin
declare @changed varchar(10) = substring(@code, @dashIndex + 1, len(@code))
if (@changed != '')
set @result = @changed;
end;
return @result;
end;
SELECT sn,
CASE WHEN ISNULL((CASE WHEN CHARINDEX('-',code)>0 THEN SUBSTRING(code,1,CHARINDEX('-',code,1)-1) ELSE code END),'')='' THEN '0'
ELSE CASE WHEN CHARINDEX('-',code)>0 THEN SUBSTRING(code,1,CHARINDEX('-',code,1)-1) ELSE code END
END AS Code,
CASE (CASE WHEN CHARINDEX('-',code)>0 THEN SUBSTRING(code,CHARINDEX('-',code,1)+1,LEN(code)) ELSE 'NA' END)
WHEN '' THEN 'NA'
ELSE CASE WHEN CHARINDEX('-',code)>0 THEN SUBSTRING(code,CHARINDEX('-',code,1)+1,LEN(code)) ELSE 'NA' END
END AS changed,
sal
FROM EMP