此查询未能按预期执行。下面是我的示例代码:
create table #test (last_name varchar(20), plan_name varchar(60))
insert #test values ('Alanis', 'Alanis UT Standard Bulk Cut (DRP)')
select last_name
, plan_name
, case when plan_name like '''' + last_name + '%''' then SUBSTRING(plan_name, len(ltrim(rtrim(last_name)))+1, len(ltrim(rtrim(last_name)))+25) else isnull(plan_name, 'NA') end
from #test
现在我期望这样做的是,如果plan_name
以last_name
开头,去掉前面的部分,这样我就只剩下plan_name
减去前缀last_name
的文本。但由于某些原因,这行不通。它只是吐出plan_name
,没有任何改变。
如果我更明确地编写代码,它就可以正常工作:
select last_name
, plan_name
, case when plan_name like 'alanis%' then SUBSTRING(plan_name, len(ltrim(rtrim(last_name)))+1, len(ltrim(rtrim(last_name)))+25) else isnull(plan_name, 'NA') end
from #test
我甚至尝试使用QUOTENAME()
函数代替我的手动连接,我得到相同的结果。我验证了源表的列实际上是varchar
数据类型(对于last_name
和price_plan
)。我想我遗漏了一些细节,但我不知道是什么。
last_name
在单引号内,删除那些额外的引号,这将工作
select last_name
, plan_name
, case when plan_name like '' + last_name + '%' then SUBSTRING(plan_name
, len(ltrim(rtrim(last_name)))+1, len(ltrim(rtrim(last_name)))+25) else isnull(plan_name, 'NA') end
from #test
另一个建议是使用sqlreplace
函数代替substring
select last_name
, plan_name
, case when plan_name like '' + last_name + '%' then replace(plan_name, last_name, '') else isnull(plan_name, 'NA') end
from #test