使用uniqueidentifier的前四个字符构建varchar

时间:2014-04-17 17:57:51

标签: sql sql-server sql-server-2008 tsql

我有一个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的前四个字符?

5 个答案:

答案 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