I've chosen to use SHA1 for this demo which produces an 160-bit (20 byte) hash.
SELECT CAST(REPLICATE('Z',1024) AS NVARCHAR(1024)) -- returns me a string of 1024 'Z' characters SELECT LEN(CAST(REPLICATE('Z',1024) AS NVARCHAR(1024))) -- clarifies the length is 1024 SELECT DATALENGTH(CAST(REPLICATE('Z',1024) AS NVARCHAR(1024))) -- shows the real storage length is 2048 (unicode, i.e. Nvarchar requires double byte storage) SELECT HASHBYTES('SHA1', CAST(REPLICATE('Z',1024) AS NVARCHAR(1024))) -- shows the MD5 hash of that Nvarchar string SELECT LEN(HASHBYTES('SHA1', CAST(REPLICATE('Z',1024) AS NVARCHAR(1024)))) -- confirms the length of that MD5 hash is 20 DECLARE @myhash VARBINARY(20) SELECT @myhash = HASHBYTES('SHA1', CAST(REPLICATE('Z',1024) AS NVARCHAR(1024))) -- assigns varbinary hash to variableIn the 'real world' , I'm using this to create indexable key values for long character strings that otherwise can't participate in indexes in this way.
CREATE TABLE [my].[SearchTerms]( [SearchID] [bigint] IDENTITY(1,1) NOT NULL, [SearchTerm] [nvarchar](1024) NOT NULL ) ON [PRIMARY] GO ALTER TABLE [my].[SearchTerms] ADD SearchTermHash AS CAST(HASHBYTES('MD5',SearchTerm) AS VARBINARY(20)) GO
solace : quindecillion
No comments:
Post a Comment