Меню


Курсы СтимулСправочникПолезные материалы1С:Предприятие 8.2РазработчикамЯзык запросов

1С:Предприятие 8.2 /
Разработчикам /
Язык запросов

Оглавление

Разрядность результатов выражений и агрегатных функций в языке запросов

Операции над строками

Операции над числами

"+" (сложение), "-" (вычитание)

"*" (умножение)

"/" (деление)

СУММА

МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ

КОЛИЧЕСТВО, ГОД, КВАРТАЛ, МЕСЯЦ, ДЕНЬГОДА, ДЕНЬ, НЕДЕЛЯ, ДЕНЬНЕДЕЛИ, ЧАС, МИНУТА, СЕКУНДА, РАЗНОСТЬДАТ

 

При использовании в запросах операций и функций над данными, в определение которых входят спецификации длины (Строка, Число) и точности (Число), бывает необходимо учитывать правила вычисления длины и точности результатов. Этот раздел содержит описание соответствующих правил.

Операции над строками

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

Функция

Неограниченная длина

Истина

Ложь, n - длина

Фиксированная

Переменная

ПОДСТРОКА(Строка, m, k) Неограниченная длинаДлина k, переменнаяДлина k, переменная
МИНИМУМ(Строка) Неограниченная длинаДлина n, фиксированнаяДлина n, переменная
МАКСИМУМ(Строка) Неограниченная длинаДлина n, фиксированнаяДлина n, переменная

В следующей таблице приведены правила определения дополнительных спецификаций результата операции "+" (конкатенация строк), имеющей 2 строковых операнда.

Операнд 1

Операнд 2

Неограниченная длина

Длина m

Фиксированная

Переменная

Неограниченная длинаНеограниченная длинаНеограниченная длинаНеограниченная длина
Длина nФиксированнаяНеограниченная длинаДлина n + m фиксированнаяДлина n + m переменная
ПеременнаяНеограниченная длинаДлина n + m переменнаяДлина n + m переменная

Операции над числами

Выполняя различные преобразования числовых данных, необходимо учитывать, что максимальное количество цифр, которое может содержать число (его целая и дробная часть вместе), равно 38 цифр. 1С:Предприятие использует десятичные числа с фиксированной точкой. Это значит, например, что число 34.28 содержит 4 цифры, число 0.000000001 содержит 9 цифр (незначащий 0 перед точкой за цифру не считается), а число 3200000000 содержит 10 цифр. Разрядность результатов различных операций вычисляется так, чтобы по возможности исключить арифметические переполнения, и в то же время максимально сохранить точность значений. При разработке конфигураций выбор разрядности полей объектов метаданных должен определяться возможной разрядностью хранимых в них данных и не должен учитывать возможное увеличение разрядности после выполнения арифметических операций и функций.

"+" (сложение), "-" (вычитание)

Операции сложения и вычитания в языке запросов всегда выполняются точно. Для этого длина дробной части результата определяется как максимальная из длин дробных частей операндов. Длина целой части результата как максимальная из длин целых частей операндов, увеличенная на 1. Если при этом общее количество цифр целой и дробной части превысит 38, то оно будет приведено к 38 за счет уменьшения числа цифр дробной части, но не менее, чем до 10.

"*" (умножение)

Операции умножения выполняется точно в том случае, если хотя бы один ее операнд является целым числом. Длина дробной части результата определяется как наибольшая из длин дробных частей операндов, но не менее 10 цифр. Длина целой части результата вычисляется как сумма длин целых частей операндов. Если при этом общее количество цифр целой и дробной части превысит 38, то оно будет приведено к 38.

"/" (деление)

Операция деления выполняется точно только если оба операнда являются целыми числами, и первый операнд делится на второй без остатка. Длина дробной части результата определяется как максимальная из длин дробных частей операндов, но не менее 10 цифр. Длина целой части результата равна сумме длин целой части делимого и дробной части делителя. Если при этом общее количество цифр целой и дробной части превысит 38, то оно будет приведено к 38 за счет уменьшения числа цифр дробной части, но не менее, чем до 10.

СУММА

Агрегатная функция СУММА вычисляется по возможности точно. Количество цифр дробной части результата равно количеству цифр дробной части операнда. Количество цифр целой части увеличивается на 7 цифр. Если при этом общее количество цифр целой и дробной части превысит 38, то оно будет приведено к 38 за счет уменьшения числа цифр дробной части, но не менее, чем до 10.

МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ

Результат функций МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ имеет какое же количество цифр в целой и дробной частях, как и их операнд.

КОЛИЧЕСТВО, ГОД, КВАРТАЛ, МЕСЯЦ, ДЕНЬГОДА, ДЕНЬ, НЕДЕЛЯ, ДЕНЬНЕДЕЛИ, ЧАС, МИНУТА, СЕКУНДА, РАЗНОСТЬДАТ

Перечисленные функции имеют числовой результат с 10 цифрами в целой части. Дробная часть отсутствует.

ПРИМЕЧАНИЯ
  1. Общее количество цифр числа равно сумме количества цифр в целой и дробной его части. Например, если в соответствии с приведенными правилами получено, что результат имеет 4 цифры в целой части и 3 цифры в дробной части, то его описание типа будет выглядеть так:
    Число(7, 3)
  2. В клиент-серверном варианте работы количество цифр в дробной части результата операции "/" (деление) ограничено снизу числом 6, а не 10. Это обусловлено особенностями десятичной арифметики в Microsoft SQL Server.
  3. Если при выполнении операций над данными в запросах целесообразно изменить правила вычисления длин и точностей результатов, то для задания желаемой длины и точности необходимо использовать оператор ВЫРАЗИТЬ. Следует иметь в виду, что если необходимо изменить длину и точность результата какой-нибудь операции, то оператор ВЫРАЗИТЬ нужно применять к ее операнду. Тогда длина и точность результата операции будет вычислена по описанным выше правилам, исходя из длины и точности операнда, заданной оператором ВЫРАЗИТЬ. Например, если поле "Реквизит1" имеет тип "Число(8, 0)", то чтобы выражение Реквизит1 / 3 имело в дробной части 15 цифр необходимо записать:
    ВЫРАЗИТЬ(Реквизит1 КАК Число(23, 15)) / 3

Нас находят: разрядность результата это


Подписка на новости RSS     Добавьте в закладки Google fusion     Мы в Google+    

 

Мы ВКонтакте

 

Мы на Facebook