Как выполнить нечувствительный к регистру селектор атрибута в 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]
Другие вопросы по тегам