我有一个ID,如:
61759092-5066-4D02-A0E4-000084E9E68D
我想要的结果是:
\6\1\7\5
这是我的方式:
select '\' + substring(CAST(idField as varchar(38)),1,1)
+ '\' + substring(CAST(idField as varchar(38)),2,1)
+ '\' + substring(CAST(idField as varchar(38)),3,1)
+ '\' + substring(CAST(idField as varchar(38)),4,1)
from mytable
它有效,但有些东西告诉我,我正在使用过多的开销来做到这一点。
有更聪明,更有效的方法吗?
如何获取以'\'分隔的uniqueidentifier的前四个字符?
答案 0 :(得分:2)
我不确定它是否更好,但这就是我想出来的。
Select
left(x.id, 1) + '\' +
left(right(x.Id, 3), 1) + '\' +
left(right(x.Id, 2), 1) + '\' +
right(x.Id, 1)
From
(
Select Left(cast(idField as varchar(38)), 4) as Id
From myTable
) x
答案 1 :(得分:1)
上述评论中我的建议示例
DECLARE @tmp TABLE (
[uid] uniqueidentifier,
CRM AS (
'\' + substring(CAST([uid] as varchar(38)),1,1)
+ '\' + substring(CAST([uid] as varchar(38)),2,1)
+ '\' + substring(CAST([uid] as varchar(38)),3,1)
+ '\' + substring(CAST([uid] as varchar(38)),4,1)
)
)
INSERT INTO @tmp([uid])
SELECT NEWID()
SELECT * FROM @tmp
答案 2 :(得分:1)
您可以使用stuff函数来完成此任务。
Select stuff(Stuff(Stuff(Stuff(Left(Cast(idField As VarChar(38)), 4),1,0,'\'), 3,0,'\'), 5,0,'\'), 7,0,'\')
from myTable
答案 3 :(得分:0)
可能不是一个有效的但是试试看
select REPLACE((SPACE(1)+
SUBSTRING('61759092-5066-4D02-A0E4-000084E9E68D',1,1)+SPACE(1)
+SUBSTRING('61759092-5066-4D02-A0E4-000084E9E68D',2,1)+SPACE(1)
+SUBSTRING('61759092-5066-4D02-A0E4-000084E9E68D',3,1)+SPACE(1)
+ SUBSTRING('61759092-5066-4D02-A0E4-000084E9E68D',4,1)+SPACE(1)
),' ','/')
答案 4 :(得分:0)
怎么样......
SELECT COALESCE('\'+SUBSTRING(idField ,1,1) ,'') +
COALESCE('\'+SUBSTRING(idField ,1+1,1) ,'') +
COALESCE('\'+SUBSTRING(idField ,1+2,1) ,'') +
COALESCE('\'+SUBSTRING(idField ,1+3,1) ,'') as id
FROM mytable