请参阅此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的输出)。那是为什么?
答案 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更改为0select case when CHARINDEX('@', something,0) > 0
then REPLACE(something,'@','@testtesttest')
else REPLACE(something,' ','') end as test1,
REPLACE(something,' ','') as test2
from test_replace