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? P>
Je n'ai rien trouvé avec Google. P>
3 Réponses :
Varbinary En tant que type servira de tableau d'octets et vous pouvez lire un octet individuel à partir de la sous-chaîne. P>
La fonction de sous-chaîne devrait suffire. Un exemple rapide, en supposant que la table mytable avec colonne Somedata, binaire (10) non null: 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> p>
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 ...
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 */