Sql server nvarchar搜索

Sql server nvarchar搜索,sql-server,tsql,Sql Server,Tsql,我有这个问题。表中有一列为nvarcar类型。 此列中的行为row1=1;6行2=12行3=6;5.67等等。。。 我尝试搜索此列。例如,当我发送1时,我尝试只获取第1行。我使用LIKE,但在结果集中我得到了第1行和第2行 我如何才能做到这一点,任何帮助都是感激的。 Tnx 您有四种可能选择钥匙的位置: 可能是整把钥匙 一开始 中间 最后 因此,您必须为每个不同的可能性进行选择,如下所示: SELECT * FROM MyTable WHERE MyColumn = @Key OR M

我有这个问题。表中有一列为nvarcar类型。 此列中的行为row1=1;6行2=12行3=6;5.67等等。。。 我尝试搜索此列。例如,当我发送1时,我尝试只获取第1行。我使用LIKE,但在结果集中我得到了第1行和第2行

我如何才能做到这一点,任何帮助都是感激的。
Tnx

您有四种可能选择钥匙的位置:

  • 可能是整把钥匙
  • 一开始
  • 中间
  • 最后
因此,您必须为每个不同的可能性进行选择,如下所示:

SELECT *
FROM MyTable
WHERE MyColumn = @Key
   OR MyColumn LIKE @Key + ';%'
   OR MyColumn LIKE '%;' + @Key + ';%'
   OR MyColumn LIKE '%;' + @Key

不是特别优雅,但这已经完成了

编辑 跟进您的评论:这在SQLServer2005中有效

CREATE TABLE Analysis (Text1 NVARCHAR(32)) 
GO

CREATE PROCEDURE [dbo].[Test] @Key as nvarchar AS 
SELECT  * 
FROM    dbo.Analysis
WHERE   Text1 = @Key 
        OR Text1 LIKE '%;'+ @Key
        OR Text1 LIKE @Key + ';%' 
        OR Text1 LIKE '%;' + @Key + ';%' 
GO

EXEC Test '1'
DROP PROCEDURE Test
DROP TABLE Analysis

规范化您的表格,在一列中存储多个值将使您感到悲伤,只要您使用此设计。以这种方式存储数据似乎更容易,但正如您所看到的,很难对这些数据进行查询,而且您创建的查询将非常糟糕,没有机会使用索引。

您可以粘贴查询吗。确保您没有使用野生字符“%”或“?”。where子句应该看起来像where columname,像'1'是存储在引用其他表的列中的值吗?或者它们只是字符串值?您可能需要重新构造数据,这将帮助您的查询取决于sql server的版本,您可以在此表上使用拆分函数创建交叉应用程序的物化索引视图,以获得非常快速的选择,请看以下答案:Hi和tnx Ok我将尝试此解决方案。使用此sp的前端是vb.net应用程序。我的目标是:我有一个(字符串的)列表,在那里我必须得到搜索结果。我将尝试创建一些实体sql查询来获得这个结果示例。对于lstSearch(字符串)中的每个r,dim res=entity-sql结果/或函数添加到新列表中,下面是我的疑问。我应该使用e-sql或ado.net来获得此结果,还是尝试使用此解决方案,并将所有内容放在sql端。可能这个问题中唯一的积极因素是这个列表(字符串)最多有五个数字。+1。也许OP无法控制表格的设计,但这确实应该是议事日程上的第一件事。是的,我知道,我同意所有这一切,但我不能取消此表格,我确信我主要关心的是此表格的性能问题。这张桌子有大约一张桌子。15000条记录,而且我必须用值1,3查询此表,并获取结果集:)hmmm当我将其放入sp时,我无法从dbo中获取正确的结果ALTER PROCEDURE[dbo]。[test]@Key作为nvarchar作为SELECT*进行分析,其中Text1=@Key或Text1类似“;”+@键+“”或类似于“++@Key+”;%的文本1或类似“%”的文本1+@键+“;%”很明显我遗漏了一些东西。。。
CREATE TABLE Analysis (Text1 NVARCHAR(32)) 
GO

CREATE PROCEDURE [dbo].[Test] @Key as nvarchar AS 
SELECT  * 
FROM    dbo.Analysis
WHERE   Text1 = @Key 
        OR Text1 LIKE '%;'+ @Key
        OR Text1 LIKE @Key + ';%' 
        OR Text1 LIKE '%;' + @Key + ';%' 
GO

EXEC Test '1'
DROP PROCEDURE Test
DROP TABLE Analysis