| Каталог | Индекс раздела |
| Назад | Содержание | Вперед |
Cравнение значений сравнивает два атомарных значения. Операторы сравнения значений включают в себя eq, ne, lt, le, gt и ge. Следующая таблица описывает эти операторы.
Таблица 1. Операторы сравнения значений в XQuery
| Оператор | Назначение | ||
| eq | Возвращает true, если первое значение равно второму значению. | ||
| ne | Возвращает true, если первое значение не равно второму значению. | ||
| lt | Возвращает true, если первое значение меньше второго значения. | ||
| le | Возвращает true, если первое значение меньше или равно второго значения. | ||
| gt | Возвращает true, если первое значение больше второго значения. | ||
| ge | Возвращает true, если первое значение больше или равно второго значения. |
Два значения могут сравниваться, если они имеют одинаковый тип или если тип одного операнда является подтипом типа другого операнда. Два операнда числовых типов (типы xs:float, xs:integer, xs:decimal, xs:double и производные от них типы) могут сравниваться. Также могут сравниваться значения xs:string и xs:anyURI.
Специальные значения: Для значений xs:float и xs:double положительный ноль и отрицательный ноль сравниваются как равные. INF равно INF, и -INF равно -INF. NaN не равно самому себе. Положительная бесконечность больше, чем другие не-NaN значения; отрицательна бесконечность меньше, чем другие не-NaN значения. NaN ne NaN дает true, а любое другое сравнение, включающее значение NaN, дает false. Два значения типа xs:QName рассматриваются как равные, если равны их URI пространств имен и их локальные имена (префиксы пространств имен не имеют значения).
Результат сравнения значений может быть булевским значением, пустой последовательностью или ошибкой. Когда вычисляется сравнение значений, каждый операнд атомизируется (преобразуется в атомарное значение) и применяются следующие правила:
Преобразование значений типа xdt:untypedAtomic в xs:string позволяет сравнениям значений быть транзитивными. Напротив, общие сравнения следуют другим правилам преобразования нетипизированных данных и, следовательно, не являются транзитивными. Транзитивность сравнения значений может быть компромиссом с потерей точности при преобразовании типов. Например, два немного различающихся значения типа xs:integer vмогут оба рассматриваться как равные одному и тому же значению типа xs:float, поскольку xs:float имеет меньшую точность, чем xs:integer.
Следующие типы могут сравниваться при помощи оператора eq или ne. Термин "Грегорианский" относится к типам xs:gYearMonth, xs:gYear, xs:gMonthDay, xs:gDay и xs:gMonth. Для бинарных операторов, которые принимают два операнда Грегорианского типа, операнды должны иметь одинаковый тип (например, если один операнд имеет тип xs:gDay, другой операнд должен иметь тип xs:gDay). Термин "числовой" относится к типам xs:integer, xs:decimal, xs:float, xs:double, и к любому типу, производному от одного из этих типов. В ходе сравнения, которое включает числовые значения, используется подстановка подтипа и перевод типа для преобразования операндов в первый тип упорядоченного списка (xs:integer, xs:decimal, xs:float, xs:double), в который операнды могут быть преобразованы.
Следующие типы могут сравниваться при помощи операторов gt, lt, ge и le. Термин "числовой" относится к типам xs:integer, xs:decimal, xs:float, xs:double. В ходе сравнения, которое включает числовые значения, используется подстановка подтипа и перевод типа для преобразования операндов в первый тип упорядоченного списка (xs:integer, xs:decimal, xs:float, xs:double), в который операнды могут быть преобразованы.T
Примеры
$book/author. Сравнение дает true только, если результатом атомизации является значение "Kennedy" как экземпляр типа xs:string или xdt:untypedAtomic. Если результатом атомизации является последовательность, которая содержит более одного значения, возвращается ошибка
$book1/author eq "Kennedy"
//product[weight gt 100]
<a>5</a> eq <a>5</a> <a>5</a> eq <b>5</b>
| Назад | Содержание | Вперед |
| Каталог | Индекс раздела |