Preciso converter um elemento de registro de data e hora na minha coluna XML para horário UTC no SQL Server 2019.
CREATE TABLE TestTable
(
Id INT IDENTITY(1,1) NOT NULL,
Data XML NOT NULL
);
INSERT TestTable (Data) VALUES ('<root>
<id>1</id>
<timestamp>2024-08-20T10:55:37+10:00</timestamp>
</root>');
Quero alterar o registro de data e hora para "2024-08-20T00:55:37Z". Estou brincando com "Data.modify('replace value of' ", mas não consigo encontrar um exemplo em que o novo valor seja baseado no valor antigo e não em uma simples substituição de string.
Há algumas maneiras de fazer isso. Eu uso alguns
APPLY
s para obter o valor do timestamp do XML e então altero para UTC comAT TIME ZONE
. Então você pode usarmodify
oUPDATE
valor XML usandosql:column
:Isso resulta no seguinte XML:
Por que não usar um datetimeoffset para armazenamento:
Então a consulta é mais rápida como sugerido com: