Добрый день. Разбираю xml sql сервером. В xml есть список нодов с датам и значениями. Мне нужно выбрать ноду с максимальной датой.
<root>
<sub_root>>
<node>
<val>1</val>
<date>31.07.2022</date>
</node>
<node>
<val>2</val>
<date>20.08.2022</date>
</node>
</sub_root>
</root>
Даты в русском/немецком формате!!!
поэтому следующий вариант работает неправильно!
declare @sCmd nvarchar(max), @sFullPath varchar(max), @x xml
set @sFullPath = 'c:\DiskD\ex.xml '
set @sCmd = N'select @xml = cast(t.data as xml) from OPENROWSET (BULK '+quotename(@sFullPath, N'''') + N', SINGLE_BLOB) t(data)'
exec sp_executesql @sCmd, N'@xml xml output', @x output;
select
ns.n.value('val[1]', 'varchar(16)') 'val'
, ns.n.value('date[1]', 'varchar(16)') 'date'
from @x.nodes('root/sub_root') sr(n)
outer apply sr.n.nodes('node[not(../node/date > date)]') ns(n)
Как я понимаю, что он не понимает что это дата и сортирует даты как строки и соответсвенно 31.07.2022 получается больше, чем 20.08.2022
Собственно вопрос можно ли преобразовать даты, чтобы рабтала сортировка?