Информация об изменениях

Сообщение Re: MSSQL Парсинг XML и прербразование дат от 02.04.2023 11:48

Изменено 02.04.2023 11:49 bnk

Re: MSSQL Парсинг XML и прербразование дат
Здравствуйте, .alex, Вы писали:

A>Добрый день. Разбираю xml sql сервером. В xml есть список нодов с датам и значениями. Мне нужно выбрать ноду с максимальной датой.

A>Даты в русском/немецком формате!!!

ChatGPT же
Я теперь стал теперь в первую очередь ему вопросы задавать такие вместо гугла, он подобную хрень хорошо тащит, ну или по крайней мере идею решения дает, если не готовое решение

DECLARE @xml XML = N'<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>';

WITH cte AS (
    SELECT 
        n.value('(val/text())[1]', 'int') AS val,
        CONVERT(date, n.value('(date/text())[1]', 'varchar(10)'), 104) AS date
    FROM @xml.nodes('/root/sub_root/node') AS t(n)
)
SELECT val, date
FROM cte
WHERE date = (SELECT MAX(date) FROM cte)

Здесь мы используем переменную @xml, которая хранит ваш XML-документ.
Затем мы используем общий табличный выражение (CTE) для извлечения значений из XML-документа,
преобразуя дату из русского/немецкого формата (день.месяц.год) с использованием кода 104.
Наконец, мы выбираем ноду с максимальной датой из CTE

Re: MSSQL Парсинг XML и прербразование дат
Здравствуйте, .alex, Вы писали:

A>Добрый день. Разбираю xml sql сервером. В xml есть список нодов с датам и значениями. Мне нужно выбрать ноду с максимальной датой.

A>Даты в русском/немецком формате!!!

ChatGPT же
Я теперь стал теперь в первую очередь ему вопросы задавать такие вместо гугла, он подобную хрень хорошо тащит, ну или по крайней мере идею решения дает, если не готовое решение

DECLARE @xml XML = N'<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>';

WITH cte AS (
    SELECT 
        n.value('(val/text())[1]', 'int') AS val,
        CONVERT(date, n.value('(date/text())[1]', 'varchar(10)'), 104) AS date
    FROM @xml.nodes('/root/sub_root/node') AS t(n)
)
SELECT val, date
FROM cte
WHERE date = (SELECT MAX(date) FROM cte)

Здесь мы используем переменную @xml, которая хранит ваш XML-документ.
Затем мы используем CTE для извлечения значений из XML-документа,
преобразуя дату из русского/немецкого формата (день.месяц.год) с использованием кода 104.
Наконец, мы выбираем ноду с максимальной датой из CTE