10
votes

Comment obtenir des octets individuels d'un champ binaire SQL

J'ai un champ binaire dans SQL Server que je souhaite lire un octet à l'heure dans une fonction SQL. Dans le code, j'utiliserais un tableau d'octets. Y a-t-il un équivalent dans SQL?

Je n'ai rien trouvé avec Google.


0 commentaires

3 Réponses :


3
votes

Varbinary En tant que type servira de tableau d'octets et vous pouvez lire un octet individuel à partir de la sous-chaîne.


0 commentaires

13
votes

La fonction de sous-chaîne devrait suffire. Un exemple rapide, en supposant que la table mytable avec colonne Somedata, binaire (10) non null: xxx

Il existe des façons de faire des moyens basés sur une fantaisie pour le faire, mais pour des valeurs courtes, cela devrait être adéquat. < / p>


5 commentaires

Cela conviendra-t-il alors d'abord le binaire en une chaîne avant d'effectuer des sous-chaînes? Est-ce la meilleure façon en termes de performance?


Selon les livres en ligne pour SQL 2008: "Retourne les données de caractères Si l'expression est l'un des types de données de caractères pris en charge. Renvoie les données binaires si l'expression est l'un des types de données binaires pris en charge. La chaîne renvoyée est le même type que l'expression spécifiée avec le exceptions montrées dans la table. "


En ce qui concerne la performance, si vous avez des quantités massives de données à convertir, ou sous-seconde transformation est nécessaire, la détermination d'un processus idéal nécessiterait un temps de test important et des efforts.


D'accord! Mais partout où je cherche surlinesahes utilise la sous-chaîne de sorte que je n'ai pas beaucoup d'options à tester à ce stade :) Je vais continuer à chercher


Postez une question sur votre problème. Je pense qu'il y a probablement une meilleure solution utilisant des tables et des applications croisées ...



6
votes

Vous pouvez faire boucle via le champ binaire à l'aide de Substring .

declare @BinaryColumn binary(5)

set @BinaryColumn = convert(binary,'abcde')

declare @Counter int, @ColumnLength int
set @Counter = 1
set @ColumnLength = LEN(@BinaryColumn)

while (@Counter <= @ColumnLength) begin
    select SUBSTRING(@BinaryColumn, @Counter, 1)
    set @Counter = @Counter + 1
end /* while */


0 commentaires