T-SQL - 为什么REPLACE在Case中无法正常工作?

时间:2015-02-26 12:03:10

标签: sql sql-server

请参阅此SQL小提琴:http://sqlfiddle.com/#!3/068e9/3/0
(MS Sql Server 2008)

架构的设置是:

create table test_replace ( something varchar(50));

insert into test_replace(something) values('072 782 5343');
insert into test_replace(something) values('071 647 2342');
insert into test_replace(something) values('whatever@something.com');

查询是:

select case when CHARINDEX('@', something,0) > -1
then REPLACE(something,'@','@testtesttest')
else REPLACE(something,' ','') end as test1,
REPLACE(something,' ','') as test2
from test_replace

CASE语句中的第二个REPLACE不起作用(比较应用于电话号码时test1到test2的输出)。那是为什么?

2 个答案:

答案 0 :(得分:4)

CHARINDEX在找不到字符串时返回0(不是你的-1)

您的查询应该是:

select case when CHARINDEX('@', something,0) > 0
then REPLACE(something,'@','@testtesttest')
else REPLACE(something,' ','') end as test1,
REPLACE(something,' ','') as test2
from test_replace

答案 1 :(得分:2)

CHARINDEX('@','072 782 5343',0)不是-1而是0

所以在条件

中将-1更改为0
select case when CHARINDEX('@', something,0) > 0
then REPLACE(something,'@','@testtesttest')
else REPLACE(something,' ','') end as test1,
REPLACE(something,' ','') as test2
from test_replace