#sql #teradata #teradatasql
#sql #teradata #teradatasql
Вопрос:
У меня есть столбец с типом данных float в Teradata. Я хочу найти максимальную точность и масштаб для этого столбца.
Примечание: масштабная часть моего столбца содержит более 10 цифр в большинстве мест.
Примерные данные
123.12321323002
13123213.13200003
33232.213123001
Вывод, который мне нужен, это
Точность 19 (масштаб длина 13123213), а масштаб равен 11 (длина 12321323002)
или
8 (длина 13123213), 11 (длина 12321323002).
Я попытался найти их, преобразовав столбец в varchar и разделив их на основе ‘.’ и сделать целочисленную и дробную части в виде 2 столбцов, а затем найти максимальную длину 2 столбцов. Но когда я выбираю данные, Teradata округляет масштабную часть. Так что после этого, если я преобразую их в char, я получаю меньшее значение для масштабной части.
Например:
данные организации: 1234.12312000123101
данные, когда я выбираю из Teradata: 1234.12312000123
Ответ №1:
Это немного длинновато для комментария.
Teradata использует формат IEEE для значений real / float. Это дает точность 15-17 цифр. Увы, вам нужно 19 цифр, поэтому нужные значения не сохраняются в базе данных. Вы не можете их восстановить.
Что вы можете сделать, так это исправить базу данных, чтобы она использовала numeric
/ decimal
/ number
. Это поддерживает то, что вы хотите: NUMERIC(19, 11)
. Затем вам нужно будет перезагрузить данные, чтобы они правильно хранились в базе данных.
Комментарии:
1. TL; DR — никогда не используйте float, проблемы перевешивают любые возможные выгоды.
2. @Andrew . , , Значения с плавающей запятой имеют место, когда диапазон значений превышает все, что может быть представлено в формате фиксированной длины. В реальных базах данных это требуется очень, очень редко. В бизнес-базах данных, возможно, никогда.
3. Достаточно справедливо. Я просто не могу смириться с непредсказуемостью, отсутствием гарантированной точности с плавающими числами. Но, может быть, это просто потому, что я немного помешан…
Ответ №2:
Если вам нужна высокая точность без предопределенного масштаба, просто переключитесь на NUMBER
тип данных, который представляет собой смесь десятичной и плавающей.
Точное числовое значение, точность не менее 38 цифр, без предопределенного масштаба, диапазон 1E-130 .. 1E125.
Плавающий на стероидах 🙂