SQL Server неожиданные результаты от изменения типа данных - PullRequest
0 голосов
/ 06 декабря 2018

Я работаю с акустическими данными, которые показывают уровни децибел с разбивкой по частотам (1/3 октавных полос).Эти значения были импортированы из плоского текстового файла, и все они имеют 1 десятичный знак (например, 74,1 или -8,0).

Мне нужно выполнить серию вычислений для таблицы, чтобы получить другие акустические меры (расчетная минута-уровня данных путем применения акустических формул к моим данным второго уровня.) Я пытаюсь сделать это с помощью ряда вложенных операторов выбора.Во-первых, мне нужно было разделить значения в децибелах на 10. Я справился с этим.Теперь я хотел бы передать сгенерированные поля, выведенные из этого оператора select, в другое, которое увеличивает мощность моих сгенерированных значений на 10.

Итак, если поле 20000_Hz имеет значение 16,3, моя сгенерированная таблица будетиметь значение 1,63 для этой записи, и я хотел бы вложить это в другой оператор выбора, который генерирует 10 ^ 1,63 для этого поля и записи.

Для этого я экспериментировал с POWER() функция.Я попробовал POWER (10, my_generated_field) и получил все нули.Я понял, что формат базы определяет формат вывода, а это означает, что если бы я сделал что-то вроде POWER (10.0000000000000000000, my_generated_field), я бы начал видеть реальные цифры, такие как 0.0000000000032151321.Кроме того, я попытался изменить свою таблицу, чтобы изменить тип данных для значений в децибелах на десятичные (38,35), чтобы увидеть, как это повлияет.Я полагаю, что изначально я установил тип данных как float, используя инструмент импорта плоских файлов.

К моему удивлению, числа, которые были импортированы из плоского текстового файла, не просто имели больше нулей, прикрепленных к концу, но имели другиеномера.Например, число, подобное 46,8, теперь может читаться как 46,8246546546843543210058, а не 46,8000000000000000, как я ожидал.

Итак, два моих вопроса:

1) Почему изменение типов данных не привело к созданиюожидаемых результатов, и где SQL получает эти другие числа?

2) Как мне обрабатывать типы данных для моих значений в децибелах, чтобы не терять точность при выполнении операции 10 ^ field_value?

Я потратил некоторое время на чтение о типах данных, функции POWER () и т. Д., Но все еще не чувствую, что пойму это самостоятельно.

...