Нужен DataType, который хранит данные как Int, но также и Decimal - PullRequest
0 голосов
/ 12 ноября 2018

Я застрял с чем-то о типах данных в mysql

У меня есть следующая таблица:

id (int,primary key),
tipo (varchar(45)),
inteiro_pedaco (varchar(45)),
marca (varchar(45)),
a (decimal(11,1),
b (decimal(11,1),
c (int (11))

столбцы A и B должны хранить данные в следующем формате: 00.0,00.1 и т. Д.

Но столбцы A и B также должны иметь возможность хранить данные, как если бы они были INT, а не только десятичными, однако, если я попытаюсь поставить, например, «10», он автоматически форматируетсяна «10,0»

Самая большая проблема: эти два столбца (A и B) ДОЛЖНЫ хранить 10 в качестве значения, а в других случаях 10,0, даже если 10,0 равно 10, оно должно храниться точно так, каконо было отправлено с десятичной дробью или без нее.Если входное значение было 10, оно должно быть сохранено как 10, если оно было 10,0, оно должно быть 10,0

И я знаю, что это может звучать странно, но, поверьте мне, он будет иногда получать данные как 10,0,я не использовал 10.0 в качестве примера, он ДЕЙСТВИТЕЛЬНО получит данные как 10.0 и 10

Я попытался прочитать о типах данных, но я не смог найти никого, кто выполнял бы эти требования, кроме varchar, но я не могу использовать varchar вв этом случае также я не могу сделать два отдельных столбца для хранения данных, они должны быть в одном столбце

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

Итак, есть какой-то тип данных, который подходит для описания выше?Если нет, то форматирование - единственный способ сделать то, что я хочу?

Спасибо за помощь

Ответы [ 3 ]

0 голосов
/ 12 ноября 2018

Возможно, вы захотите иметь несколько столбцов. например, DEC_VAL, INT_VAL, STR_VAL

Это решит проблемы объединения и фильтрации, но его будет немного сложнее поддерживать.

0 голосов
/ 12 ноября 2018

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

select case when cast(cast(A as int) as decimal) = A then cast(A as int) else A end

То, что мы делаем здесь, это тестирование, если столбец A как int равен десятичному столбцу A, и если они совпадают, мы приводим его как int. Если они не равны, мы оставляем столбец A десятичным.

Как отмечали другие, это довольно странная проблема, потому что большинство вещей будет оценивать 1.0 = 1, но я предполагаю, что это форматирование вывода, а не логическая оценка в дальнейшем. В любом случае, надеюсь, это поможет:)

0 голосов
/ 12 ноября 2018

Если конечные или ведущие переменные важны, то вы должны хранить значение в виде строки.У вас действительно нет большого выбора.

По сути, значение - это не число, это какой-то код.В мире чисел 10.0 равно 10.

РЕДАКТИРОВАТЬ:

Исходя из вашего комментария, у вас должно быть два столбца, которые являются целыми числами.Один - для «части до десятичной точки», второй - для диапазона.

Вы ошибаетесь, пытаясь поместить две вещи в один столбец.

...