从varchar(36)到UNIQUEIDENTIFIER

use*_*169 1 sql sql-server varchar casting uniqueidentifier

我想投一个AuctionId这是一个UNIQUEIDENTIFIERvarchar(36),然后回到一个UNIQUEIDENTIFIER.请帮我.

CAST((SUBSTRING(CAST([AuctionId] as VARCHAR(36)), 0, 35) + '1') AS UNIQUEIDENTIFIER)
Run Code Online (Sandbox Code Playgroud)

但我一直收到这个错误:

消息8169,级别16,状态2,行647从字符串转换为uniqueidentifier时转换失败.

提前致谢

Dav*_*vid 5

'1'不是问题.您显然是在尝试将GUID的最后一个字符更改为1.我不知道为什么,但这是您的要求.

你的问题是子字符串.在TSQL中,子字符串使用从1开始的索引而不是 0,如在C或C#中.这意味着你的substring语句实际上返回一个34个字符的字符串(+1个字符组成35个字符串,而你被告知35个字符的字符串不是GUID,这是正确的).

只需更改,0,351,35