为什么这个 CASE 没有按预期执行?
Why does this CASE not do as expected?
此查询未能按预期执行。这是我的示例代码:
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
开头,则去掉前面的部分,这样我就剩下 [=12= 的文本了] 减去前缀 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()
函数而不是手动连接,但我得到了相同的结果。我验证了我的来源 table 的列实际上是 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
另一个建议是使用 sql replace
函数代替 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
此查询未能按预期执行。这是我的示例代码:
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
开头,则去掉前面的部分,这样我就剩下 [=12= 的文本了] 减去前缀 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()
函数而不是手动连接,但我得到了相同的结果。我验证了我的来源 table 的列实际上是 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
另一个建议是使用 sql replace
函数代替 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