2012-12-13 21 views
-3

我在表中找到大量数据。但只有一小部分给我找到整数。我正在寻找一些新的方法来找到这些,而不使用like运营商。我知道这很简单,但我需要一种新方法。鉴于在不使用LIKE运算符的情况下查找整个值

  • 值为:4213076600
  • 价值发现是:89013106904213076600

我想找到它在下面的查询:

SELECT * 
FROM table_name 
WHERE column_name in (value,value,value) 

我已经搜查了网站与此并了解左()和右()功能,但不知道如何安排他们获得结果

+0

为什么你不能用'like'?另外,我认为你省略了一个关键要求。你是否要搜索*多于一个*部分值? – Leigh

+0

雅我需要搜索多个值,这就是为什么我需要使用'in'函数 – faizan

+0

否,['IN'](http://msdn.microsoft.com/en-us/library/ms177682%28v=sql .90%29.aspx)在这里不起作用。它只能找到完全匹配。如果你需要部分匹配,你必须使用'like'(或类似的东西)。即'WHERE COL LIKE'%aaa%'或者col LIKE'%bbb%''。 – Leigh

回答

0
SELECT 
    * 
FROM 
    table_name 
WHERE 
    CHARINDEX(value1,column_name)>0 
    OR CHARINDEX(value2,column_name)>0 
    OR CHARINDEX(value3,column_name)>0 
+0

其给予空列......如果它有助于列是在varchar格式 – faizan

+0

@faizan“它给空列”...你是什么意思?我在这里使用了'CHARINDEX' – whytheq

0
DECLARE @table table (n varchar(20)) 
DECLARE @param1 varchar(20) 

SET @param1 = '4213076600' 

INSERT INTO @table (n) 
SELECT '89013106904213076600' 

SELECT n 
FROM @table 
WHERE RIGHT(n, len(@param1)) = @param1 

编辑

select * 
from table_name 
where right(column_name, len(value)) = value 
+0

也许你不明白这一点......我必须从已经包含这个值的表中找到'89013106904213076600',并且我有'4213076600'的值来找到它是以上价值的一部分..... – faizan

+0

@faizan我的答案是任何人都可以扔进他们的sql编辑器并运行的单个可测试单元,想象你的表格被替换为我的表格,'n'列替换为你的列。更新了答案。 –

+0

雅感谢第二个查询的作品,但它只适用于单个值...和...我必须在单个查询中找到多个,就像我已经声明的示例 – faizan

2

您可以使用CONTAINSmore info

SELECT * 
FROM table_name 
WHERE CONTAINS(column_name , '"*value*"') 

CONTAINS,你需要创建一个FULL TEXT INDEXon the table

+0

+1新的给我 – whytheq

+0

这是一个很好的解决方案,如果你的SQL版本是> = 2005,并且你的表是全文索引的。 – gkrogers

-1
SELECT left(column_name,length_of_value) 
FROM table_name 
WHERE RIGHT(column_name,length_of_value_given) IN (value,value,value) 

这就是它的工作方式为IN条款

相关问题