我无法控制模式的一个表包含一个定义为varchar(50)的列,该列以"a89b1acd95016ae6b9c8aabb07da2010"(无连字符)格式存储唯一标识符

我想将它们转换为SQL中的唯一标识符,以便传递给.Net Guid.但是,以下查询行不适用于我:

select cast('a89b1acd95016ae6b9c8aabb07da2010' as uniqueidentifier)
select convert(uniqueidentifier, 'a89b1acd95016ae6b9c8aabb07da2010')

并导致:

Msg 8169, Level 16, State 2, Line 1
Conversion failed when converting from a character string to uniqueidentifier.

使用连字号uniqueidentifier的相同查询可以正常工作,但数据不是以这种格式存储的.

有没有其他(有效的)方法可以将这些字符串转换为SQL中的唯一标识符.-我不想在晚上做这件事.Net代码.

推荐答案

DECLARE @uuid VARCHAR(50)
SET @uuid = 'a89b1acd95016ae6b9c8aabb07da2010'
SELECT  CAST(
        SUBSTRING(@uuid, 1, 8) + '-' + SUBSTRING(@uuid, 9, 4) + '-' + SUBSTRING(@uuid, 13, 4) + '-' +
        SUBSTRING(@uuid, 17, 4) + '-' + SUBSTRING(@uuid, 21, 12)
        AS UNIQUEIDENTIFIER)

Sql相关问答推荐

错误ORA-00908:通过全能自动化,缺少PLSQL编译器的关键字

有没有一种正确的方法来利用SQL UNION来从三个潜在查询中 Select 最大值?

为什么在这种情况下我不能使用LAG函数?

按分隔符和总和分析字符串

ColdFusion+Docker:未安装SQLSERVER包

SQL数据库规范化与数据插入

Postgres SQL查询从字符串中获取邮箱地址

WooCommerce产品的SQL查询:获取sku和产品标签

使用多个WITH子查询的替代方法

连续天跟踪购买情况(将标记返回到另一列?)

DbUp for sqlserver 在 dbo 授权下为非 dbo 用户创建架构

如何根据创建日期查找两个表中最接近的记录?

SQL Select 字母范围没有给我任何东西

计算组内多个日期间隔go 年的累计天数

获取多个开始-结束时间戳集之间经过的时间

根据不同日期标准分配组的逻辑

在 MS Access VBA 中,如何测量显示查询的时间?

根据条件列出不同的值

使用一组值进行分组和计数

postgreSQL 中的循环表