Можно ли объявить значение узла как локальную переменную, такую как
DECLARE @xVal1 <type>;
SET @xVal1 = '/*:OrderWithItems/*:Order/*:ShipServiceLevel)[1]';
, а затем обратиться к @ xVal1 ниже в условии WHERE вместо полного пути xml.
SELECT o.nOrderId AS 'OrderId',
o.Source,
o.Subsource,
lc.cCountry,
CAST(ObjectXML as xml).value('(/*:OrderWithItems/*:Order/*:ShipServiceLevel)[1]', 'NVARCHAR(max)') AS 'ServiceLevel',
CAST(ObjectXML as xml).value('(/*:OrderWithItems/*:Order/*:LatestDeliveryDate)[1]', 'datetime') AS 'LatestDeliveryDate'
FROM [OrderXML] x
INNER JOIN [Open_Order] o ON o.pkOrderId = x.fkOrderId
INNER JOIN [ListCountries] lc ON lc.pkCountryId = o.fkCountryId
WHERE
o.Source = 'AMAZON' AND
o.Subsource IN ('Trimming Shop', 'Wedding Decor - UK') AND
lc.cCountry = 'United Kingdom' AND
x.type = 'Default' AND
CAST(ObjectXML as xml).value('(/*:OrderWithItems/*:Order/*:ShipServiceLevel)[1]', 'NVARCHAR(max)') = 'UK Next' AND
CAST(ObjectXML as xml).value('(/*:OrderWithItems/*:Order/*:LatestDeliveryDate)[1]', 'datetime') = DATEADD(day, 1, GETDATE())
Вот набор результатов:
Результат запроса
Я хочу преобразовать значение LatestDeliveryDate в формате даты ДД-ММ-ГГГГ