Извлечение значения элемента из строки XML в SQL SELECT

Я пытаюсь извлечь значение элемента в строке XML из запроса SQL. В приведенном ниже коде OPDV.DialValue возвращает строку XML с элементом, который я хочу получить.

select OPDV.DialValue as DueDate           -- DialValue returns an XML string
from Orders O

join OrderProduct OP
    on OP.OrderID = O.OrderID

join OrderProductDialValue OPDV
    on OPDV.OrderProductID = OP.OrderProductID

join Dial_Culture DC
    on DC.DialID = OPDV.DialID

join Users U
    on U.UserID = O.CustomerID

where (O.OrderId = @OrderId) and (DC.FriendlyName = 'Due Date & Time')

Это возвращает приведенный ниже XML. Мне пришлось включить здесь комментарии в код, потому что теги исчезают и показывают только данные.

<!--<DateTime><Server>03/04/2018 10:00:03</Server><Client>03/04/2018 10:00:00</Client><FriendlyDisplay>4/3/2018 10:00 AM</FriendlyDisplay></DateTime>-->

Мне нужно извлечь данные из FriendlyDisplay. Я могу проанализировать XML с помощью приведенного ниже кода. Это вернет 03.04.2018 10:00.

DECLARE @form XML = '<DateTime><Server>03/04/2018 10:00:03</Server><Client>03/04/2018 10:00:00</Client><FriendlyDisplay>4/3/2018 10:00 AM</FriendlyDisplay></DateTime>'

SELECT a.b.value('FriendlyDisplay[1]', 'varchar(100)')
    FROM @form.nodes('DateTime') a(b) 

Я пробовал играть с подзапросами, чтобы заменить OPDV.DialValue на FriendlyValue в строке XML, но ничего не помогло. Я не могу объявить переменную в подзапросе, т.е.

select (declare @form xml=OPDV.DialValue; select ... )

SQL предназначен для функции, выполняемой в веб-приложении. Есть ли способ извлечь текст из FriendlyValue?

Спасибо.

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
249
1

Ответы 1

Если я понимаю, о чем вы спрашиваете ... Вы пытаетесь взять значение из XML и установить его как переменную ... Итак, что-то вроде следующего?

DECLARE @form XML = '<DateTime><Server>03/04/2018 10:00:03</Server><Client>03/04/2018 10:00:00</Client><FriendlyDisplay>4/3/2018 10:00 AM</FriendlyDisplay></DateTime>'

DECLARE @MyDate DATETIME

SELECT @MyDate = a.b.value('FriendlyDisplay[1]', 'varchar(100)')
    FROM @form.nodes('DateTime') a(b) 

SELECT * FROM sometable WHERE someDate = @MyDate

Другие вопросы по теме