還是工作中遇到的需求,有時候和外部的系統對接,進行數據的核對功能,外部的系統有時候主鍵字段列數據類是UNIQUEIDENTIFER(GUID)類型的字符串格式,去除了GUID格式中的分隔符“-”。基於上面的原因,在數據庫中可能要將這類的“GUID去格式化的字符串”轉化為GUID,便於和本系統的相關聯數據進行來核對。
SQL Server中的字符串轉化為GUID的T-SQL代碼如下:
1 IF OBJECT_ID(N'dbo.ufn_GUID', 'FN') IS NOT NULL 2 BEGIN 3 DROP FUNCTION dbo.ufn_GUID; 4 END 5 GO 6 7 --================================== 8 -- 功能: 字符串轉換為GUID 9 -- 說明: 1、不足32為的字符串則轉換為0x0 10 -- 作者: XXX 11 -- 創建: XXXX-XX-XX 12 -- 修改: XXXX-XX-XX XXX XXXXXX 13 -- 調用: SET @uniGuid = dbo.fn_GUID('31F74CD6EDE94B19BC4C29A8A7791DC7') 14 --================================== 15 CREATE FUNCTION dbo.ufn_GUID 16 ( 17 @chnStr NCHAR(32) -- 字符串 18 ) RETURNS UNIQUEIDENTIFIER 19 --$Encode$-- 20 AS 21 BEGIN 22 -- 初始化處理NULL時的變量@chnStr的默認值 23 SET @chnStr = ISNULL(@chnStr, N''); 24 25 IF LEN(@chnStr) < 32 26 BEGIN 27 RETURN 0x0; 28 END 29 30 RETURN LEFT(@chnStr, 8) + '-' + SUBSTRING(@chnStr, 9 ,4) + '-' + SUBSTRING(@chnStr, 13, 4) + 31 '-' + SUBSTRING(@chnStr, 17 ,4) + '-' + SUBSTRING(@chnStr, 21, 12); 32 END 33 GO
演示該標量函數效果的T-SQL代碼如下:
1 SELECT dbo.ufn_GUID('31F74CD6EDE94B19BC4C29A8A7791DC7') AS GuidVule; 2 GO
執行后的查詢效果如下: