มีวิธีสร้างสตริง MD5 Hash ประเภท varchar (32) โดยไม่ใช้ fn_varbintohexstr หรือไม่
SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5', 'email@dot.com')), 3, 32)
ดังนั้นจึงสามารถใช้ในมุมมองที่มีการกำหนดตารางเวลา
มีวิธีสร้างสตริง MD5 Hash ประเภท varchar (32) โดยไม่ใช้ fn_varbintohexstr หรือไม่
SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5', 'email@dot.com')), 3, 32)
ดังนั้นจึงสามารถใช้ในมุมมองที่มีการกำหนดตารางเวลา
คำตอบ:
CONVERT(VARCHAR(32), HashBytes('MD5', 'email@dot.com'), 2)
ใช้HashBytes
SELECT HashBytes('MD5', 'email@dot.com')
ที่จะให้คุณ 0xF53BD08920E5D25809DF2563EF9C52B6
-
SELECT CONVERT(NVARCHAR(32),HashBytes('MD5', 'email@dot.com'),2)
ที่จะทำให้คุณ F53BD08920E5D25809DF2563EF9C52B6
วิธีการแก้:
SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5','your text')),3,32)
ไม่มีคำตอบอื่นใดที่เหมาะกับฉัน โปรดทราบว่า SQL Server จะให้ผลลัพธ์ที่แตกต่างกันหากคุณส่งสตริงแบบฮาร์ดโค้ดเทียบกับฟีดจากคอลัมน์ในชุดผลลัพธ์ของคุณ ด้านล่างนี้คือความมหัศจรรย์ที่ได้ผลสำหรับฉันในการจับคู่ที่สมบูรณ์แบบระหว่าง SQL Server และ MySql
select LOWER(CONVERT(VARCHAR(32), HashBytes('MD5', CONVERT(varchar, EmailAddress)), 2)) from ...
LOWER()
เป็นสิ่งที่จำเป็นในกรณีที่มีความละเอียดอ่อนเท่านั้น
MD5
แฮเมื่อเทียบกับการทำงานของMD5()
Postgresql
ผมก็แปลกใจว่าทำไมMD5
hashs แตกต่างจากและPython
Postgresql
ขอบคุณสำหรับสูตร ..
ลองสิ่งนี้:
select SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5', 'email@dot.com' )),3,32)
declare @hash nvarchar(50)
--declare @hash varchar(50)
set @hash = '1111111-2;20190110143334;001' -- result a5cd84bfc56e245bbf81210f05b7f65f
declare @value varbinary(max);
set @value = convert(varbinary(max),@hash);
select
SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5', '1111111-2;20190110143334;001')),3,32) as 'OK'
,SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5', @hash)),3,32) as 'ERROR_01'
,SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5',convert(varbinary(max),@hash))),3,32) as 'ERROR_02'
,SUBSTRING(sys.fn_sqlvarbasetostr(sys.fn_repl_hash_binary(convert(varbinary(max),@hash))),3,32)
,SUBSTRING(sys.fn_sqlvarbasetostr(master.sys.fn_repl_hash_binary(@value)),3,32)
SELECT CONVERT(
VARCHAR(32),
HASHBYTES(
'MD5',
CAST(prescrip.IsExpressExamRX AS VARCHAR(250))
+ CAST(prescrip.[Description] AS VARCHAR(250))
),
2
) MD5_Value;
เหมาะกับฉัน
คุณไม่ได้บอกอย่างชัดเจนว่าคุณต้องการให้สตริงเป็นเลขฐานสิบหก หากคุณเปิดรับการเข้ารหัสสตริง 64 ฐานที่มีพื้นที่มากขึ้นและคุณกำลังใช้ SQL Server 2016 หรือใหม่กว่านี่เป็นทางเลือกอื่น:
select SubString(h, 1, 32) from OpenJson(
(select HashBytes('MD5', 'email@dot.com') h for json path)
) with (h nvarchar(max));
สิ่งนี้ก่อให้เกิด:
9TvQiSDl0lgJ3yVj75xStg==