哈希几个字符串tsql

cs0*_*815 1 sql t-sql sql-server

我想创建一个像这样的唯一哈希:

SELECT
    CAST(HASHBYTES('SHA1', 
        LTRIM(RTRIM(ISNULL('9',''))) + 
        LTRIM(RTRIM(isnull('X',''))) + 
        LTRIM(RTRIM(isnull('',''))) + 
        LTRIM(RTRIM(isnull('Y',''))) + 
        LTRIM(RTRIM(isnull('','')))) AS VARBINARY(20))

SELECT
    CAST(HASHBYTES('SHA1', 
        LTRIM(RTRIM(isnull('9',''))) + 
        LTRIM(RTRIM(isnull('X',''))) + 
        LTRIM(RTRIM(isnull('Y',''))) + 
        LTRIM(RTRIM(isnull('',''))) + 
        LTRIM(RTRIM(isnull('','')))) AS VARBINARY(20))
Run Code Online (Sandbox Code Playgroud)

不幸的是,尽管有不同的字符串,我最终得到相同的哈希.有什么想法吗?

PS:

这解决了上述"问题":

SELECT  LTRIM(RTRIM(ISNULL('9', '-'))) + N',' + LTRIM(RTRIM(ISNULL('X', '-')))
        + N',' + LTRIM(RTRIM(ISNULL('', '-'))) + N',' + LTRIM(RTRIM(ISNULL('Y',
                                                              '-'))) + N','
        + LTRIM(RTRIM(ISNULL('', '-'))) ,
        CAST(HASHBYTES('SHA1',
                       LTRIM(RTRIM(ISNULL('9', '-'))) + N','
                       + LTRIM(RTRIM(ISNULL('X', '-'))) + N','
                       + LTRIM(RTRIM(ISNULL('', '-'))) + N','
                       + LTRIM(RTRIM(ISNULL('Y', '-'))) + N','
                       + LTRIM(RTRIM(ISNULL('', '-')))) AS VARBINARY(20))

SELECT  LTRIM(RTRIM(ISNULL('9', '-'))) + N',' + LTRIM(RTRIM(ISNULL('X', '-')))
        + N',' + LTRIM(RTRIM(ISNULL('Y', '-'))) + N',' + LTRIM(RTRIM(ISNULL('',
                                                              '-'))) + N','
        + LTRIM(RTRIM(ISNULL('', '-'))) ,
        CAST(HASHBYTES('SHA1',
                       LTRIM(RTRIM(ISNULL('9', '-'))) + N','
                       + LTRIM(RTRIM(ISNULL('X', '-'))) + N','
                       + LTRIM(RTRIM(ISNULL('Y', '-'))) + N','
                       + LTRIM(RTRIM(ISNULL('', '-'))) + N','
                       + LTRIM(RTRIM(ISNULL('', '-')))) AS VARBINARY(20))
Run Code Online (Sandbox Code Playgroud)

dan*_*era 5

因为没有不同的标志:

    LTRIM(RTRIM(ISNULL('9',''))) + 
    LTRIM(RTRIM(isnull('X',''))) + 
    LTRIM(RTRIM(isnull('',''))) + 
    LTRIM(RTRIM(isnull('Y',''))) + 
    LTRIM(RTRIM(isnull('','')))) 

    -- is the same of

    LTRIM(RTRIM(isnull('9',''))) + 
    LTRIM(RTRIM(isnull('X',''))) + 
    LTRIM(RTRIM(isnull('Y',''))) + 
    LTRIM(RTRIM(isnull('',''))) + 
    LTRIM(RTRIM(isnull('','')))) 

    -- that is the same of

    '9XY'
Run Code Online (Sandbox Code Playgroud)

  • @csetzkorn - 所以如果你需要区分空列,也许你应该使用某种分隔符. (2认同)