像SQL中的Operator一样

时间:2014-04-02 14:37:13

标签: sql sql-server operators sql-like

我尝试使用sql查询编写报告

      SELECT 
r.PostCode,
r.Email
FROM dbo.tbl_RegisterMain_Holding as r
Where r.PostCode LIKE @PostCode AND RegisterType = '2'

运行报告时,您可以输入多个邮政编码进行搜索,但是我没有得到任何结果。

我只想搜索邮政编码的前3或4个字母。 任何想法为什么这不会带来数据?非常感谢 感谢

2 个答案:

答案 0 :(得分:2)

如果@PostCode包含要搜索的SINGLE邮政编码/片段,并假设您要搜索与该值匹配的匹配项,请尝试:

Where r.PostCode LIKE @PostCode + '%' AND RegisterType = '2'

如果@PostCode包含要搜索的多个邮政编码/片段(例如" AB,AC,AD"),那么这种方法将不起作用,您需要先将它们分成各个值的方法匹配。您可以使用我已概述的here方法之一,但JOIN将使用LIKE而不是等于。

修改:

由于它们以逗号分隔,因此您需要沿着上面链接中列出的其中一条路线前进。有三个选项可用于传递多个值:CSV(按原样),XML或表值参数。表值参数是恕我直言的最佳路线。但假设您坚持使用CSV,那么结束SQL将是(需要fnSplit函数):

SELECT r.PostCode, r.Email
FROM dbo.tbl_RegisterMain_Holding as r
    JOIN dbo.fnSplit(@Postcode, ',') t ON r.PostCode LIKE t.Item + '%'

答案 1 :(得分:-1)

LIKE运算符搜索模式。因此,您必须将通配符添加到var @PostalCode

尝试:

SELECT r.PostCode, r.Email FROM dbo.tbl_RegisterMain_Holding as r
WHERE r.PostCode LIKE '%' + @PostCode + '%' AND RegisterType = '2'