如何生成与Advantage Database Server格式相同的GUID字符串



我有一个优势数据库V11,我目前在其中存储一个唯一标识符,该标识符是使用NewIDString('F')生成的22个字符长的GUID字符串。

ADS帮助中的片段如下:-

"F或文件–使用文件和URL安全base64编码的22字节字符串的GUID,格式为xxxxxxxxxxxxxxxxxxxxxx。base64编码的字符串区分大小写,不应存储在不区分大小写的字符串字段中。"

是否可以在Microsoft SQL中生成相同格式的GUID字符串?

如果没有,ADS帮助文件列出其他格式如下:-

新闻字符串返回格式化为字符串的GUID。如果未指定格式参数,GUID字符串将格式化为十六进制字符串,格式为xxxxxxxx-xxxx-xxxx.xxxx-xxxxxxxxxxxxx。格式参数可以是以下值:

M或MIME–使用MIME base64编码的24字节字符串GUID,格式为xxxxxxxxxxxxxxxxxxx。Base64编码的字符串区分大小写,不应存储在不区分大小写的字符串字段中

F或File–使用文件和URL安全base64编码的22字节字符串GUID,格式为xxxxxxxxxxxxxxxxxxxxxx。Base64编码的字符串区分大小写,不应存储在不区分大小写的字符串字段中

N或Numbers–一个GUID,编码为32字节的十六进制字符串值,格式为xxxxxxxxxxxxxxxxxxxxx

D或Delimited–编码为32字节十六进制字符串的GUID,格式为xxxxxxxx-xxxx-xxxx.xxxx-xxxxxxxxxxxxx

B或带括号–编码为32字节十六进制字符串的GUID,格式为[xxxxxxxx-xxxx-xxxx.xxxx-xxxxxxxxx]

p或带圆括号–编码为32字节十六进制字符串的GUID,格式为(xxxxxxxx-xxxx-xxxx-XXxxxxxxxxxxxx)

C或Curlyraces–编码为32字节十六进制字符串的GUID,格式为{xxxxxxxx-xxxx-xxxx.xxxx-xxxxxxxxxxxxx}

MS-SQL可以生成其中一个吗?

问候

Mike

在SQL SerVer中,NEWID函数会创建新的GUID(SQL SerVer数据类型称为UNIQUEIDENTIFIER)。GUID是一个二进制值,您在问题中提到的各种格式只是二进制值的不同字符串表示。在NEWID的MSDN页面中,示例A将GUID的标准字符串表示形式显示为XXXXXXXX-XXXX-XXXXXXXXXXXXXX。

在SQL Server中创建BASE64编码的字符串不是直接的,而是可能的。

因此,从ADS创建File格式GUID所需的一切都可以由SQL Server生成。

NEWIDSTRING(M):

-- Generate a GUID in the format "1Jg/YZ7tNkG7PQr1wVe7KA=="
SELECT
    CAST(N'' AS XML).value(
          'xs:base64Binary(xs:hexBinary(sql:column("bin")))'
        , 'VARCHAR(MAX)'
    ) AS "NEWIDSTRING_M"
FROM (
    SELECT CAST(NEWID() AS VARBINARY) AS bin
) AS bin_sql_server_temp;

NEWIDSTRING(F):

-- Generate a GUID in the format "1Jg/YZ7tNkG7PQr1wVe7KA"
SELECT
    LEFT(CAST(N'' AS XML).value(
          'xs:base64Binary(xs:hexBinary(sql:column("bin")))'
        , 'VARCHAR(MAX)'
    ), 22) AS "NEWIDSTRING_F"
FROM (
    SELECT CAST(NEWID() AS VARBINARY) AS bin
) AS bin_sql_server_temp;

其中F只是M,去掉了最后两个字符(总是"==")。

最新更新