Как выполнить нечувствительный к регистру селектор атрибута в xquery
Я пытаюсь запросить столбец XML на сервере SQL и хочу выбрать записи, в которых значение атрибута соответствует строке без учета регистра.
Например, рассмотрим следующее значение для столбца XML:
<items>
<item k="Description" v="hello" />
</items>
Прямо сейчас мой выбор выглядит так:
SELECT
MyXmlColumn.value('(/items/item[@k="Description"]/@v)[1]', 'nvarchar(max)') as v
FROM Table
Проблема заключается в том, что значением атрибута "k" может быть "Описание", "Описание" или "ОПИСАНИЕ".
Как мне написать XQuery, чтобы он выполнял сопоставление без учета регистра?
1 ответ
Решение
Вы можете использовать функцию нижнего регистра fn:lower-case
(что сделает атрибуты, которые вы ищете, строчными), а затем убедитесь, что в вашем запросе вы используете строчные буквы:
SELECT
MyXmlColumn.value('(/items/item[fn:lower-case(@k)="description"]/@v)[1]', 'nvarchar(max)') as v
FROM [Table]