将uniqueidentifier类型转换为字符串

8
在我的数据库 SQL Express 2014 中,我有一个名为 Membership 的表,其中有一个名为 UserId 的列。该列的类型为 uniqueidentifier。
我想将 UserId 列的内容转换为字符串,为此我使用以下代码行:
select convert(nvarchar(50), UserId) as UserId from Membership

但是在执行上面的命令后,我仍然以uniqueidentifier格式获得了一组数字和字母。

更新:

这里是表中列UserId中数据的示例:

3CDDF65A-3F2B-48C9-814B-006AB2B70B5A

我需要将它转换为字符串。

你有什么想法?如何将 uniqueidentifier 格式转换并显示为字符串?


那么你期望的输出是什么? - Pawan Nogariya
@TheGameiswar 你能看到请更新吗? - Michael
select convert(nvarchar(255),replace('3CDDF65A-3F2B-48C9-814B-006AB2B70B5A','-','')) - TheGameiswar
@qxg 我期望得到一些可读的文本值。 - Michael
如果是这样,只需选择其他列,比如名称。很常见的情况是表格中只包含_不可读_的内容。 - qxg
显示剩余3条评论
3个回答

8

这是 NewID() GUID 在您的数据库中是最独特的。

如果您希望获得更可读的 ID,则应使用 INT/BigInt 作为主键,并将 Identity(1,1) 作为您的 UserID。

所有这些都会返回完全相同的内容。

DECLARE @User_ID UNIQUEIDENTIFIER = NEWID()
SELECT CAST(@User_ID AS NVARCHAR(50))
SELECT CONVERT(NVARCHAR(50),@User_ID)
SELECT @User_ID

unique_identifier就是一个唯一标识符,不是某个常见字符串或整数的加密值。


所以,由于它是由数据库生成的,没有办法将其转换为更易读的内容? - Michael
@Michael,uniqueidentifier并不是某种秘密哈希算法。它实际上就是其中的实际值。字符串将完全相同。为什么你想要更可读的内容呢?如上所述,可以选择使用标识符。 - Jens
有没有不使用char(36)的理由?n似乎过于复杂,因为guid仅限于a-f、0-9和破折号字符,并且它的大小不可变。 - user420667

1
我相信你的代码 SELECT CONVERT(nvarchar(50), NEWID()) AS UserId 实际上是将唯一标识符转换为字符串。
如果你在寻找另一个答案,你应该指定你期望从转换中得到的结果。

1

这是我会使用的SQL语句:

DECLARE @Value1 uniqueidentifier
PRINT 'Value1: ' + ISNULL(convert(nvarchar(100), @Value1), 'NULL')

DECLARE @Value2 uniqueidentifier
SET @Value2 = newid()
PRINT 'Value2: ' + ISNULL(convert(nvarchar(100), @Value2), 'NULL')

这样可以确保即使值为NULL,也会显示某些内容,因此输出结果将是这样:
Value1: NULL
Value2: 9D630D0F-53B3-4A7B-93C2-E0B6F4C398F6

你可能需要或不需要这个额外的功能。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接