还是工作中遇到的需求,有时候和外部的系统对接,进行数据的核对功能,外部的系统有时候主键字段列数据类是UNIQUEIDENTIFER(GUID)类型的字符串格式,去除了GUID格式中的分隔符“-”。基于上面的原因,在数据库中可能要将这类的“GUID去格式化的字符串”转化为GUID,便于和本系统的相关联数据进行来核对。
SQL Server中的字符串转化为GUID的T-SQL代码如下:
IF OBJECT_ID(N'dbo.ufn_GUID', 'FN') IS NOT NULL
BEGIN
DROP FUNCTION dbo.ufn_GUID;
END
GO --==================================
-- 功能: 字符串转换为GUID
-- 说明: 、不足32为的字符串则转换为0x0
-- 作者: XXX
-- 创建: XXXX-XX-XX
-- 修改: XXXX-XX-XX XXX XXXXXX
-- 调用: SET @uniGuid = dbo.fn_GUID('31F74CD6EDE94B19BC4C29A8A7791DC7')
--==================================
CREATE FUNCTION dbo.ufn_GUID
(
@chnStr NCHAR() -- 字符串
) RETURNS UNIQUEIDENTIFIER
--$Encode$--
AS
BEGIN
-- 初始化处理NULL时的变量@chnStr的默认值
SET @chnStr = ISNULL(@chnStr, N''); IF LEN(@chnStr) <
BEGIN
RETURN 0x0;
END RETURN LEFT(@chnStr, ) + '-' + SUBSTRING(@chnStr, ,) + '-' + SUBSTRING(@chnStr, , ) +
'-' + SUBSTRING(@chnStr, ,) + '-' + SUBSTRING(@chnStr, , );
END
GO
演示该标量函数效果的T-SQL代码如下:
SELECT dbo.ufn_GUID('31F74CD6EDE94B19BC4C29A8A7791DC7') AS GuidVule;
GO
执行后的查询效果如下: