T-SQL - 我做SELECT时的奇怪结果

时间:2010-08-10 12:57:24

标签: tsql

我正在尝试搜索包含“;”的任何字符串在表格的一列中,会产生一些奇怪的结果。

这不仅仅归还了“;”的结果但也返回那些不包含任何“;”的行但是包含一个“'”。

这是我的问题:

select *
from fields
where Comment like '%;%'

并返回结果

  

第1行& 2而不是3& 4条记录

有什么想法吗?

我正在添加以下表结构和一些insert语句以供参考。虽然现在结果会有所不同

>/****** Object: Table [dbo].[Fields]  Script Date: 08/10/2010 14:18:56 ******/
SET ANSI_NULLS ON
GO

>SET QUOTED_IDENTIFIER ON
GO

>SET ANSI_PADDING ON
GO

>CREATE TABLE [dbo].[Fields](
    [ID] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
    [Comment] [text] NULL,
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

>SET ANSI_PADDING OFF
GO

>INSERT INTO Fields (Comment) VALUES ('Moody''s Corp')
Go

>INSERT INTO Fields (Comment) VALUES ('0% as core business is ex-growth and hasn''t grown in a decade.')
Go

>INSERT INTO Fields (Comment) VALUES ('bphivgcofc ;')
Go

>INSERT INTO Fields (Comment) VALUES ('Newsflow - recommendations on use of paracetamol. Will probably takeoff EPS; in a worst-case but low probability scenario could be a 3% hit to earnings.')
Go

-------已解决-----

  

我认为问题出在我用来查询数据库的界面中。此数据库是外部托管的,因此提供程序为我们提供了访问该数据的接口,并且该接口似乎存在问题。

感谢大家的帮助和建议。

4 个答案:

答案 0 :(得分:3)

你是否对你的领域感到困惑?

您正在搜索评论等于LIKE%;%,然后您似乎返回公司名称的结果?也许这是一个评论,但它看起来不是。也许您的查询应该是:

select companyName from fields where companyName like '%;%'

select coment from fields where Comment like '%;%'

也永远不要使用asterix,选择要返回的字段。这个问题就是为什么你应该这样做的一个很好的例子!在这些情况下更容易调试。

答案 1 :(得分:0)

听起来很奇怪。
试试

select case when "Moody's Corp, Lowe's Companies, Inc., L'Oreal SA" like '%;%' then 1 end

答案 2 :(得分:0)

首先,摆脱text数据类型。这已被弃用,您需要尽快替换此所有实例。请改用nvarchar(max)或varchar(max)。

我使用你的select语句和Chryss的语句得到了正确的结果,她/他逃脱了分号。

您在其中一条评论中说这是您真实查询的简化版本,也许您将问题简化了?

答案 3 :(得分:0)

我认为它是我用于查询数据库的界面中的问题。该数据库是外部托管的,因此提供商为我们提供了访问该数据的界面,并且该界面似乎存在问题。

感谢大家的帮助和建议。