l'interrogation colonne binaire en utilisant comme dans sql server
Je suis à l'aide de SQL Server 2008. Dans ma table j'ai une colonne appelée TestData
de type binary
.
Des données de l'échantillon dans TestData colonne sont
1. 0x0001DC780C0030373156635D0C00B8840301009A0600AC
2. 0x0301DC780C0030373156385D0C006499C401009A0600AC
Écrit en dessous de deux requêtes pour obtenir les lignes où TestData commence avec "0x0001". Mais aucun d'entre eux travaillent.
SELECT *
FROM T_TRANSACTION
WHERE CAST(Indicium AS nvarchar(MAX)) LIKE '0x0001%'
----No results found
SELECT *
FROM T_TRANSACTION
WHERE CAST(Indicium AS nvarchar(MAX)) LIKE '0x0001%'
----Returns all the rows
Veuillez corriger la requête pour obtenir les résultats attendus
- Vos deux requêtes sont exactement les mêmes? Aussi j'ai ajouté une réponse avec plus d'explications et le code pour le faire une à deux faces génériques COMME.
Vous devez vous connecter pour publier un commentaire.
Ne pas le convertir, mais la traiter comme une gamme (comme vous le feriez valeurs datetime)
Cela a le bonus d'être en mesure d'utiliser un index sur TestData
Modifier, il suffit juste de préciser autant de chiffres que vous avez besoin
'0x0301%'
BINARY
champs de longueur fixe.Une pointe de préfixe de comparaison, gbn la réponse ne pourra le faire. Pour un réel COMME l'équivalence de la chaîne de recherches, vous pouvez utiliser comme suit:
(emprunt de schéma et les données de l'échantillon à partir de @gbn)
Lorsque vous lancez une valeur binaire de type VARCHAR, il n'est de traiter les raw bits comme une chaîne de stream. Il n'a pas la baguette magique pour le convertir dans la représentation de chaîne. Prenons l'exemple ci-dessous:
Parce que l'octet 0x41 ou ordinale de 65 ans est de 'A' dans la norme latine codepage.