2010-08-10 4 views
1

J'essaye de chercher n'importe quelle chaîne qui contient ";" dans une colonne d'une table qui aboutit à des résultats étranges.T-SQL - Résultats bizarres lorsque je fais un SELECT

Ce n'est pas seulement me renvoyer les résultats qui ont ";" mais renvoie également les lignes qui ne contiennent aucun ";" mais contient à la place un "'".

Voici ma question:

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

et ont donné des résultats est

Ligne 1 & 2 au lieu de 3 & 4 records

Toute idée?

J'ajoute la structure de tableau suivante et quelques instructions d'insertion pour référence. Bien que le résultat sera différent maintenant

 
>/****** 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 

------- ----- SOLVED

Je pense que le problème est dans l'interface que je utilise pour interroger la base de données. Cette base de données est hébergée de manière externe, donc le fournisseur nous a donné une interface pour accéder à ces données et il semble qu'il y ait un problème dans cette interface.

Merci pour l'aide et les suggestions de chacun.

+0

Quelle version de SQL Server utilisez-vous et qu'est-ce que le type de données de Comment? Je l'ai testé avec 'VARCHAR', 'NVARCHAR', 'TEXT', 'CHAR' dans SQL Server 2005 et n'obtiens aucun résultat. – Kashif

+0

@upvoter, êtes-vous également confronté au même problème? S'il vous plaît partagez vos pensées. – Kashif

+0

J'utilise SQL Server 2005 et le type de données est du texte. ça ne marche toujours pas pour moi. – TheITGuy

Répondre

0

Je pense que c'est le problème dans l'interface que j'utilise pour interroger la base de données. Cette base de données est hébergée à l'extérieur de sorte que le fournisseur nous a donné l'interface pour accéder à ces données et il semble qu'il y ait un problème dans cette interface.

Merci pour l'aide et les suggestions de tous.

0

Semble étrange.
Essayez

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

+0

S'il vous plaît se référer à nouveau modifier – TheITGuy

3

en êtes-vous confus entre vos champs?

Vous recherchez où les commentaires égalent LIKE%;%, puis vous semblez renvoyer le résultat du nom de l'entreprise? C'est peut-être un commentaire, mais il semble que ce ne soit pas le cas. Peut-être votre requête devrait être:

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

ou

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

jamais utiliser les asterix, sélectionnez les champs que vous souhaitez retourner. Cette question est un bon exemple de pourquoi vous devriez faire cela! Facilitez le débogage dans ces circonstances.

+0

+1 pour prendre soin de détails avant d'aller résoudre le problème, bon je l'admire beaucoup. – Kashif

+0

Les données que j'ai données ressemblent à un nom de société, mais elles sont utilisées dans différentes prospectives, donc la requête et ses résultats sont corrects. Astrix a été utilisé comme coupe-circuit ici, mais l'application réelle utilise des noms de champs corrects. Les commentaires sont un type de données de texte, de sorte que l'utilisateur peut entrer n'importe quel texte comme bon lui semble. – TheITGuy

0

Tout d'abord, débarrassez-vous du type de données texte. Cela a été déprécié et vous devez remplacer toutes les instances de ceci dès que vous le pouvez. Utilisez nvarchar (max) ou varchar (max) à la place.

Je reçois les résultats corrects avec votre instruction select et avec la déclaration de Chryss où il/elle échappe le point-virgule.

Vous dites dans l'un des commentaires qu'il s'agit d'une version simplifiée de votre requête réelle, peut-être que vous avez simplifié le problème?

+0

Ok, je me suis débarrassé du type de données de texte et converti en varchar (max) et je reçois toujours le même résultat. – TheITGuy

+0

S'il vous plaît poster la vraie requête. – HLGEM

Questions connexes