Численные выражения

Численное выражение – это выражение, значение которого относится к числовому типу данных. Вот формальный синтаксис численного выражения:

 

numeric_value_expression> ::= numeric_term
| numeric_value_expression + term
| numeric_value_expression – term

 

numeric_term ::= numeric_factor
| numeric_term * numeric_factor
| numeric_term / numeric_factor

 

numeric_factor ::= [ { + | - } ] numeric_primary

 

numeric_primary ::= value_expression_primary
| numeric_value_function

 

Следует обратить внимание на то, что в численных выражениях SQL первичная составляющая (numeric_primary) является либо первичным выражением (см. выше), либо вызовом функции с численным значением (numeric_value_function). Из этого, в частности, следует, что в численные выражения могут входить выражения с переключателем и операции преобразования типов. Вызовы функций с численным значением определяются следующими синтаксическими правилами:

 

numeric_value_function ::=
POSITION (character_value_expression
IN character_value_expression)
| { CHAR_LENGTH | CHARACTER_LENGTH }
(string_value_expression)
| OCTET_LENGTH (string_value_expression)
| BIT_LENGTH (string_value_expression)
| EXTRACT ({ datetime_field | time_zone field }
FROM { datetime_value_expression
| interval_value_expression })
| CARDINALITY (array_value_expression
| multiset_value_expression)
| ABS (numeric_value_expression)
| MOD (numeric_value_expression)

 

Мы достаточно подробно обсуждали функции определения позиции и длины по отношению к символьным и битовым строкам при рассмотрении соответствующих типов данных; здесь приводится только уточненный синтаксис их вызова. Функция EXTRACT извлечения поля из значений дата-время или интервал позволяет получить в виде точного числа с масштабом 0 значение любого поля (года, месяца, дня и т.д.). Какой конкретный тип точных чисел будет выбран – определяется в реализации. Функцию CARDINALITY мы также обсуждали в Лекции 11. Функции ABS и MOD возвращают абсолютное значение числа и остаток от деления одного целого значения на другое соответственно.