Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 将时间戳转换为xml_Sql Server_Xml_Timestamp - Fatal编程技术网

Sql server 将时间戳转换为xml

Sql server 将时间戳转换为xml,sql-server,xml,timestamp,Sql Server,Xml,Timestamp,可以执行以下操作: SELECT SomeTimestampColumn FROM SomeTable FOR XML PATH('') 结果看起来像一个字符串 e、 g 但由于某些原因,SQL不允许我这样做 从SomeTable中选择CONVERTxml、SomeTimestampColumn 这里有两个相关问题: 除了XML路径之外,还有其他方法从sql或XML获取等效字符串吗 有没有更好的方法来捕获/转换时间戳到一个更易于操作的字符串?我需要在c应用程序之间来回传递它,并将使用它来确定在

可以执行以下操作:

SELECT SomeTimestampColumn FROM SomeTable FOR XML PATH('')
结果看起来像一个字符串 e、 g

但由于某些原因,SQL不允许我这样做

从SomeTable中选择CONVERTxml、SomeTimestampColumn

这里有两个相关问题:

除了XML路径之外,还有其他方法从sql或XML获取等效字符串吗 有没有更好的方法来捕获/转换时间戳到一个更易于操作的字符串?我需要在c应用程序之间来回传递它,并将使用它来确定在此期间没有其他人更改了该行 谢谢,
迈克

这就是你想要做的:

SELECT convert(datetime, SomeTimestampColumn) 
FROM SomeTable FOR XML PATH('SomeTimestampColumn')
如果希望列为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,您可以将其转换回Base64。下面是一些UDF的链接,这些UDF也可以进行转换

结果:

AAAAAAAAJ3k=    AAAAAAAAJ3k=    0x0000000000002779  0x0000000000002779

谢谢你的回答,但它特别是时间戳数据类型,它不是datetime-它基本上是一种只能转换为binary8的内部数据类型,我无法确定如何将其转换为类似xml的字符串。所有好的片段,谢谢,现在测试每一个,看看哪一个工作得最好。你知道它对时间戳类型做了什么来将其转换成XML吗?我唯一担心的是,这似乎是一种单向转换,将其转换回二进制8似乎会产生垃圾,我不确定它是否会始终生成唯一的字符串行?@runnthespot-它被转换为base64,并且可以再次转换回二进制。
ID          SomeTimestampColumn
----------- --------------------------------------------------
1           AAAAAAACDZg=
2           AAAAAAACDZk=
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