declare @T table(SomeTimestampColumn timestamp, id int)
insert into @T(id) values(1)
insert into @T(id) values(2)
select
(select SomeTimestampColumn for xml path('')) as SomeTimestampColumn
from @T
如果你想列是XML类型
select
(select SomeTimestampColumn for xml path(''), type) as SomeTimestampColumn
from @T
或者,如果你只希望值
select
T1.ID,
T3.N.value('.', 'varchar(50)') as SomeTimestampColumn
from @T as T1
cross apply
(select T1.SomeTimestampColumn for xml path(''), type) as T2(X)
cross apply
T2.X.nodes('SomeTimestampColumn') as T3(N)
结果
ID SomeTimestampColumn
----------- --------------------------------------------------
1 AAAAAAACDZg=
2 AAAAAAACDZk=
的转换为Base64,你可以将其转换回。这是一些可以进行转换的UDF的链接。 http://www.vbforums.com/showthread.php?t=554886
declare @T table(SomeTimestampColumn timestamp, id int)
insert into @T(id) values(1)
declare @Base64 varchar(max)
declare @Binary varbinary(max)
select
@Binary = T1.SomeTimestampColumn,
@Base64 = T3.N.value('.', 'varchar(50)')
from @T as T1
cross apply
(select T1.SomeTimestampColumn for xml path(''), type) as T2(X)
cross apply
T2.X.nodes('SomeTimestampColumn') as T3(N)
select
@Base64,
CAST(N'' AS XML).value('xs:base64Binary(xs:hexBinary(sql:variable("@Binary")))', 'VARCHAR(MAX)'),
@Binary,
CAST(N'' AS XML).value('xs:base64Binary(sql:variable("@Base64"))', 'VARBINARY(MAX)')
结果:
AAAAAAAAJ3k= AAAAAAAAJ3k= 0x0000000000002779 0x0000000000002779
所有好的片段,谢谢,现在测试每个看看什么效果最好。 – Runonthespot 2011-04-27 14:55:03
你知道它是如何将时间戳类型转换为XML的吗?我唯一担心的是,这似乎是一个单向转换(转换回二进制(8)似乎产生垃圾),我不知道它是否会始终生成唯一的字符串行? – Runonthespot 2011-04-27 15:00:35
@Runonthespot - 它被转换为base64,并可以再次转换回二进制。 – 2011-04-27 16:49:47