MSSQL Парсинг XML и прербразование дат
От: .alex Ниоткуда  
Дата: 02.04.23 09:36
Оценка:
Добрый день. Разбираю 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
Собственно вопрос можно ли преобразовать даты, чтобы рабтала сортировка?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.