Convert String To Color in SQL Server

  1. CREATE FUNCTION dbo.fn_conversion_string_color(  
  2. @in_string VARCHAR(200)  
  3. )  
  4. RETURNS NVARCHAR(500)  
  5. AS  
  6. BEGIN  
  7. DECLARE @fsetprefix BIT-- append '0x' to the output   
  8. @pbinin VARBINARY(MAX), -- input binary stream   
  9. @startoffset INT-- starting offset    
  10. @cbytesin INT-- length of input to consider, 0 means total length   
  11. @pstrout NVARCHAR(MAX),   
  12. @i INT,   
  13. @firstnibble INT ,  
  14. @secondnibble INT,   
  15. @tempint INT,  
  16. @hexstring CHAR(16)  
  17.   
  18. SELECT @fsetprefix = 1,  
  19. @pbinin = SUBSTRING(HASHBYTES('SHA1', @in_string), 1, 3),  
  20. @startoffset = 1,  
  21. @cbytesin = 0   
  22.   
  23. -- initialize and validate   

  24. IF (@pbinin IS NOT NULL)   
  25. BEGIN    
  26. SELECT @i = 0,   
  27. @cbytesin = CASE  WHEN (@cbytesin > 0 AND @cbytesin <= DATALENGTH(@pbinin))  
  28.   THEN @cbytesin  
  29.   ELSE DATALENGTH(@pbinin)  
  30.   END,   
  31. @pstrout =  CASE  WHEN (@fsetprefix = 1)  
  32.   THEN N'0x'  
  33.   ELSE N''  
  34.   END,   
  35. @hexstring = '0123456789abcdef'   
  36.    
  37. --the output limit for nvarchar(max) is 2147483648 (2^31) bytes, that is 1073741824 (2^30) unicode characters   
  38.   
  39. IF (  
  40. ((@cbytesin * 2) + 2 > 1073741824)  
  41. OR ((@cbytesin * 2) + 2 < 1)  
  42. OR (@cbytesin IS NULL )  
  43. )   
  44. RETURN NULL   
  45.    
  46. IF (  
  47. ( @startoffset > DATALENGTH(@pbinin) )  
  48. OR (@startoffset < 1 )  
  49. OR (@startoffset IS NULL )  
  50. )   
  51. RETURN NULL   
  52.    
  53. -- adjust the length to process based on start offset and total length   
  54.   
  55. IF ((DATALENGTH(@pbinin) - @startoffset + 1) < @cbytesin)   
  56. SELECT @cbytesin = DATALENGTH(@pbinin) - @startoffset + 1   
  57.   
  58. -- do for each byte   
  59. WHILE (@i < @cbytesin)   
  60. BEGIN   
  61. -- Each byte has two nibbles  which we convert to character   

  62. SELECT @tempint = CAST(SUBSTRING(@pbinin, @i + @startoffset, 1) AS INT)   
  63. SELECT @firstnibble = @tempint / 16   
  64. SELECT @secondnibble = @tempint % 16   
  65.     
  66. -- we need to do an explicit cast with substring for proper string conversion.     

  67. SELECT @pstrout = @pstrout +   
  68.   CAST(SUBSTRING(@hexstring, (@firstnibble+1), 1) AS NVARCHAR) +   
  69.   CAST(SUBSTRING(@hexstring, (@secondnibble+1), 1) AS NVARCHAR)   
  70. SELECT @i = @i + 1   
  71. END   
  72. END   
  73. RETURN  '#' + UPPER(RIGHT(@pstrout, 6))  
  74.  END