像sql server中的运算符问题

时间:2013-06-21 03:59:04

标签: sql sql-server sql-like

declare @CustField6 nvarchar(10)
declare @sample nvarchar(10)
set @CustField6 = 'sf'

select customer_id  from csu_customer_policy
    inner join csu_policy on csu_policy.policy_number = csu_customer_policy.policy_number
    and csu_policy.data_source = csu_customer_policy.data_source
    where csu_policy.vehicle_no like  + '''' + @CustField6 + '%''' and csu_customer_policy.delete_status = 0 and csu_customer_policy.site_id = 1

我希望csu_policy.vehicle_nosf%

开头的所有记录

如果我直接给出值sf而不是@CustField6它会给出我的所有记录,但是当我使用@CustField6执行此操作时,它不会给出任何错误但是不会检索任何记录,甚至我打印此代码以检查查询是否正确被框架,并且它正常工作。但我不知道为什么它没有检索任何记录?

6 个答案:

答案 0 :(得分:2)

您的语法不正确。它应该是:

where csu_policy.vehicle_no like @CustField6 + '%'

假设@CustField6等于sf,这相当于

where csu_policy.vehicle_no like 'sf%'

如果你这样做:

where csu_policy.vehicle_no like ''''  + @CustField6 + '%''''

然后你实际上是这样做的:

where csu_policy.vehicle_no like '''sf%'''

换句话说,您正在查找与'sf%'匹配的记录 - 以引号开头的记录,然后是sf,然后是任何内容,然后以引号结束。

答案 1 :(得分:1)

将您的条件更改为:

WHERE csu_policy.vehicle_no LIKE @CustField6 + '%' 

演示:SQL Fiddle

答案 2 :(得分:0)

我认为您的查询存在的问题是,在您所处的条件中,您有多个'+: 它应该是where csu_policy.data_source like @custField6 + '%'而不是csu_policy.vehicle_no like + '''' + @CustField6 + '%'''

declare @CustField6 nvarchar(10) 
declare @sample nvarchar(10) 
set @CustField6 = 'sf'

select customer_id 
from csu_customer_policy 
inner join csu_policy on csu_policy.policy_number = csu_customer_policy.policy_number 
      and csu_policy.data_source = csu_customer_policy.data_source 
where csu_policy.vehicle_no like @CustField6 + '%' 
and csu_customer_policy.delete_status = 0 and csu_customer_policy.site_id = 1

答案 3 :(得分:0)

尝试摆脱+

from
 csu_policy.vehicle_no like + '''' + @CustField6 + '%'''

To
 csu_policy.vehicle_no like  ''''+ @CustField6 + '%'''

答案 4 :(得分:0)

删除不需要的引号。试试这个。

declare @CustField6 nvarchar(10)
declare @sample nvarchar(10)
set @CustField6 = 'sf'

select customer_id  from csu_customer_policy
    inner join csu_policy on csu_policy.policy_number = csu_customer_policy.policy_number
    and csu_policy.data_source = csu_customer_policy.data_source
    where (csu_policy.vehicle_no like  + '' + @CustField6 + '%') and    
           csu_customer_policy.delete_status = 0 and 
           csu_customer_policy.site_id = 1

答案 5 :(得分:0)

请使用以下单引号:

declare @CustField6 nvarchar(10)
declare @sample nvarchar(10)
set @CustField6 = 'sf'

select customer_id  from csu_customer_policy
    inner join csu_policy on csu_policy.policy_number = csu_customer_policy.policy_number
    and csu_policy.data_source = csu_customer_policy.data_source
    where csu_policy.vehicle_no like  '' + @CustField6 + '%' and csu_customer_policy.delete_status = 0 and csu_customer_policy.site_id = 1