sql >> データベース >  >> RDS >> Sqlserver

master.dbo.fn_varbintohexstr なしの varbinary から varchar へ

    md5 と sha1 の場合、hashbytes を使用できます . base64 を取得するには、変換を行う udf を作成し、それを計算列で使用できます。

    関数 BinToBase64:

    create function BinToBase64(@Bin varbinary(max)) returns varchar(max) as
    begin
      return CAST(N'' AS XML).value('xs:base64Binary(xs:hexBinary(sql:variable("@Bin")))', 'VARCHAR(MAX)')
    end
    

    関数 BinToHexString:

    create function BinToHexString(@Bin varbinary(max)) returns varchar(max) as
    begin
      return '0x' + cast('' as xml).value('xs:hexBinary(sql:variable("@Bin") )', 'varchar(max)'); 
    end
    

    次のように使用します:

    create table TestTable 
    (
      Col1 varbinary(max), 
      Col2 as dbo.BinToHexString(hashbytes('MD5', Col1)),
      Col3 as dbo.BinToHexString(hashbytes('SHA1', Col1)),
      Col4 as dbo.BinToBase64(Col1),
    )
    insert into TestTable values (12345)
    
    select *
    from TestTable
    

    hashbytes と uniqueidentifier 列を使用した一意制約 varbinary 列

    create table TestTable 
    (
      ID uniqueidentifier default(newid()),
      Col1 varbinary(max), 
      Col2 as coalesce(hashbytes('MD5', Col1), cast(ID as varbinary(8000))) persisted
    )
    
    create unique index IX_TestTable_Col2 on TestTable(Col2)
    



    1. Oracle DML table_reference用のパーサーはありますか?

    2. 文字列の制約をチェックして、数字のみを含めます。 (Oracle SQL)

    3. Androidの再発イベントの期間がNULLになるのはなぜですか?

    4. MySQLのGROUP_CONCAT()関数