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

How to generate a GUID string in the same format as Advantage Database Server?

我有一个优势数据库 V11,我目前在其中存储一个唯一标识符,它是使用 NewIDString('F').

生成的 22 个字符长的 GUID 字符串

ADS 帮助中的摘录如下:-

"F or File – A GUID encoded as a 22-byte string using File and URL Safe base64 encoding with the format of xxxxxxxxxxxxxxxxxxxxxx. Base64 encoded strings are case sensitive and should not be stored in case insensitive string fields."

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

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

NEWIDSTRING Returns 一个格式化为字符串的 GUID。如果未指定格式参数,则 GUID 字符串被格式化为具有以下模式的十六进制字符串 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx。格式参数可以是以下值:

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

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

N 或数字 – 编码为 32 字节十六进制字符串值的 GUID,格式为 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.

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

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

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

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

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

此致

麦克

在 SQL 服务器中 NEWID function creates new GUIDs (the SQL Server data type is called UNIQUEIDENTIFIER)。 GUID 是一个二进制值,您在问题中提到的各种格式只是二进制值的不同字符串表示形式。在 NEWID 示例 A 的 MSDN 页面中,GUID 的标准字符串表示形式为 XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX。

在 SQL-服务器中创建 BASE64 编码字符串并不简单,but possible

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

新字符串(男):

-- 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;

新字符串(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。