带有通配符的SQL Server WHERE

时间:2013-01-28 19:04:26

标签: sql-server sql-server-2008

是否可以在SQL Server 2008中为where in语句使用通配符?

例如,我目前有:

SELECT something  
FROM myTable  
WHERE    (ORG + '-' + ORGSUB like '5015001-________' or
          ORG + '-' + ORGSUB like '5015018-________' or 
          ORG + '-' + ORGSUB like '_______-________')

我需要这样做:

SELECT something  
FROM myTable 
WHERE
   (ORG + '-' + ORGSUB) in( '5015001-________','5015018-________','_______-________')

我将通过存储过程将这些值作为逗号分隔列表传递。是否还有另一种方法可以完成它?

4 个答案:

答案 0 :(得分:1)

使用逗号分隔列表,将其拆分,然后将其插入临时表...

然后,您可以在LIKE中使用JOIN语句到此临时表:

SELECT something
FROM myTable mt
JOIN #tempTable tt
    ON mt.ORG + '-' + mt.ORGSUB LIKE tt.SearchValue

答案 1 :(得分:1)

为什么您甚至关心查询中的ORGSUB(如示例中所示)? 在我看来,您应该重写WHERE子句以分别查找组件,例如:

SELECT something  
FROM myTable  
WHERE ORG IN (5015001, 5015018, ...) 
[add other criteria as appropriate]

答案 2 :(得分:1)

为什么以逗号分隔的列表?

DECLARE TYPE dbo.OrgSub AS TABLE(s VARCHAR(32));
GO
CREATE PROCEDURE dbo.SearchOrgSubs
  @OrgSub dbo.OrgSub READONLY
AS
BEGIN
  SET NOCOUNT ON;

  SELECT t.something 
    FROM dbo.mytable AS t
    INNER JOIN @OrgSub AS o
    ON t.ORG + '-' + t.ORGSUB = o.s;
END
GO

现在,您可以将 set 从C#或任何地方传递到存储过程中,而无需先将其形成逗号分隔列表。

答案 3 :(得分:0)

您可以创建临时表包含split函数的结果。

SELECT somthing 
from myTable  
    JOIN dbo.Split('5015001-________','5015018-________','_______-________') as Splits 
    on (ORG + '-' + ORGSUB) like Splits.items