0
votes

Quelles sont les différences entre ces deux cordes?

Je suis déconcertant que je ne trouve pas les différences entre ces deux jeux de cordes, qui semblent être exactement les mêmes pour moi. J'ai vérifié l'espace blanc entre les cordes, mais pas de chance. Lors de la course sous les questions ci-dessous dans SQL Management Studio, un seul d'entre eux retourne des résultats ... S'il vous plaît aider, merci. XXX


7 commentaires

Ils sont identiques. Ou au moins ce que vous avez affiché (espoir, collé). Prenez le temps de nous donner un exemple de reproductible minimal .


Courez-vous les deux de la même fenêtre sous la même base de données?


Option 1: Option de caractères non imprimables 2: même glyphe code différent


@ shawnt00 qui est correct, même fenêtre, même base de données


@Larny, ils semblent identiques, mais on retourne une ligne, l'autre ne fait pas


@Larnu ressemble à la rendu de Markdown rend les espaces non rompus comme des espaces réguliers. Le texte brut est différent


Copier / coller 2 requêtes dans un éditeur qui peut montrer des caractères cachés


4 Réponses :


0
votes

Cela pourrait être que votre chaîne ou la colonne a un caractère spécial CR ou CRLF, essayez de supprimer ces caractères de la comparaison:

SELECT * 
FROM Vendors 
WHERE replace(replace(ltrim(rtrim(VendorCode)), char(13), ''), char(10), '') = replace(replace(ltrim(rtrim('SRP  85072B')), char(13), ''), char(10), '')


1 commentaires

Merci de votre réponse, mais désolé de dire quand je l'exécute, ça retourne zéro rangée ...



0
votes

Ce code utilise un TADY pour séparer les deux chaînes, convertir chaque caractère à sa valeur ASCII et renvoyer les différences.

declare
  @string1      nvarchar(200)='zdq%E^&$DGE%^#((',
  @string2      nvarchar(200)='zdq%E^&$DGx%^#((';

select ascii(SUBSTRING(@string1, t.n, 1)), t.n from dbo.fnTally(1, len(@string1)) t
except
select ascii(SUBSTRING(@string2, t.n, 1)), t.n from dbo.fnTally(1, len(@string2)) t;


0 commentaires

6
votes

Une des chaînes comporte deux espaces réguliers consécutifs, l'autre a un espace non rompant (caractère 160 décimal 0xa0 hex) suivi d'un espace normal (caractère 32 décimal 0x20 hexagonal).

Vous pouvez le voir de copier et coller les chaînes d'ici comme je l'ai fait ici https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=0dc6ccc48439c3dc27a227aa2dffb4d2 p>

0x4154542020363031393753    
0x415454A020363031393753


0 commentaires

0
votes

Ils semblent similaires Si vous exécutez la requête SQL suivante xxx pré>

si les paramètres proviennent de la même source, vous pouvez vérifier à l'aide de la requête suivante P>

DECLARE @param nvarchar(max) = 'SRP  85072B'
SELECT * FROM Vendors WHERE VendorCode like  '%'+ @param+'%'


0 commentaires