Reputation: 7173
I have a binary field in SQL Server which I want to read one byte at time in a SQL function. In code I would use a byte array. Is there an equivalent in SQL?
I couldn't find anything with google.
Upvotes: 11
Views: 13975
Reputation: 135809
You could loop through the binary field using 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 */
Upvotes: 7
Reputation: 40309
The SUBSTRING function should be sufficient. A quick example, assuming table MyTable with column SomeData, binary(10) not null:
DECLARE
@OneByte binary(1)
,@Loop int
SET @Loop = 0
WHILE @Loop < 10
BEGIN
SET @Loop = @Loop + 1
SELECT @OneByte = substring(SomeData, @Loop, 1)
from MyTable
-- Process accordingly
END
There are fancier set-based ways to do this, but for short values this should be adequate.
Upvotes: 15
Reputation: 27294
Varbinary as a type will act as a byte array, and you can read an individual byte from it using substring.
Upvotes: 3