Сравнения НОМЕРА Oracle

Eric Z Борода:

дата действия предназначена для указания на зону местного времени, но не определенную

Хорошо - назад к исходной точке. Попробуйте это:

where t.TheDateINeedToCheck BETWEEN (
    dateadd(hh, (tz.Offset + ISNULL(ds.LocalTimeZone, 0)) * -1, @ActivityDate)
    AND
    dateadd(hh, (tz.Offset + ISNULL(ds.LocalTimeZone, 0)) * -1, (@ActivityDate + 1))
)

, который переведет @ActivityDate в местное время и выдержит сравнение с этим. Это - Ваша лучшая возможность для использования индекса, хотя я не уверен, что это будет работать - необходимо попробовать его и проверить план запросов.

следующая опция была бы индексным представлением с индексируемым, вычисленным TimeINeedToCheck в местное время . Тогда Вы просто возвращаетесь к:

where v.TheLocalDateINeedToCheck BETWEEN @ActivityDate AND (@ActivityDate + 1)

, который определенно использовал бы индекс - хотя у Вас есть небольшие издержки на ВСТАВКЕ и ОБНОВЛЕНИИ тогда.

5
задан Steven 6 July 2009 в 14:14
поделиться

3 ответа

Да, Oracle NUMBER типы точны. Они больше похожи на целые числа с масштабом, чем на типы float / double. Итак, ЧИСЛО (10,3) состоит из 10 цифр, 3 после десятичной точки, что на самом деле является 10-значным целым числом со шкалой 3. Фактически, именно так работает Java BigDecimals (будучи BigInteger плюс внутренняя шкала).

5
ответ дан 14 December 2019 в 08:58
поделиться

Oracle гарантирует точность 38 цифр в ЧИСЛЕ, хотя 40 может быть представлено. См. Справочную информацию в Oracle Concepts .

0
ответ дан 14 December 2019 в 08:58
поделиться

Oracle NUMBER типы хранятся как наборы сотенных цифр (то есть основание 100 , а не основание 10 ), один цифра на байт.

Первый байт представляет показатель степени, другие байты представляют мантиссу.

Это означает, что для очень больших чисел даже целые числа могут быть округлены:

SELECT  10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -
        10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
FROM    dual


---
0
2
ответ дан 14 December 2019 в 08:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: