Konstantine |
Отправлено: 28.02.2005, 10:38 |
|
Мастер участка
Группа: Модератор
Сообщений: 545
|
Имеется база (инфа о компах), в которой одна из таблиц — модели винтов... её структура — ID, Name и размер. Размер самое оптимальное я придумал хранить так — число small int и 1 единица числа = 100 Мб винта, т.е если хранится 43, то это размер 4,3 Gb. поэтому поле называется dGSize
ВНИМАНИЕ вопрос : как это учитывать на уровне запросов, т.е. чтоб ADOQuery1->FieldByName("dGSize")->AsString вернуло что-то типа "4,3" ?
пробовал SQL | SELECT ID, Name, dGSize/10 as dGSize FROM HDD | но оно округляет к целому, а десятичную часть отбрасывает
|
|
AVC |
Отправлено: 28.02.2005, 11:12 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Какая СУБД?
QUOTE | как это учитывать на уровне запросов, т.е. чтоб ADOQuery1->FieldByName("dGSize")->AsString вернуло что-то типа "4,3" |
Как вы и написали Select dGSize / 10 as dGSize
и поставить FieldByName("dGSize")->DisplayFormat = "0.0"
QUOTE | но оно округляет к целому ... |
Странно. Может округляет displayformat?
А если посмотреть тип поля — что говорит?
А явное преобразование типа
cast (... as double[numeric(12,4)])
или (dGSize + 0.0)
не помогает?
|
|
Konstantine |
Отправлено: 28.02.2005, 12:03 |
|
Мастер участка
Группа: Модератор
Сообщений: 545
|
я пробовал в Enterprise Manager, и там тоже целое вернуло... сама база возвращает integer-ом
|
|
Konstantine |
Отправлено: 28.02.2005, 12:08 |
|
Мастер участка
Группа: Модератор
Сообщений: 545
|
УРРЯЯ получилось:
SQL | SELECT ID, Name, (dGSize + 0.0) / 10 AS Size FROM HDD |
суть была-то понятна сразу — сделать поле дробным... но вот не знал как
ПАСИБ...
|
|
avc* |
Отправлено: 28.02.2005, 12:17 |
|
Не зарегистрирован
|
Ну тогда и так может поможет
dGSize / 10.0 AS Size |
|
xim |
Отправлено: 28.02.2005, 18:41 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 143
|
QUOTE | Ну тогда и так может поможет
dGSize / 10.0 AS Size |
Да нет, здесь дело в определении типа при компиляции инструкции — раз базовое поле smallint? то и результат smallint. В SQL Server я бы сделал
SQL | SELECT ID, Name, cast(cast(dGSize as numeric(5,1))/10 as numeric(5,1)) as dGSize FROM HDD | |
|
AVC |
Отправлено: 01.03.2005, 09:21 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
2xim
Я поэтому и пишу может
Потому, что, например, для ASA6 и FB это справедливо. Так запрос
SELECT ID, ID / 10.0, ID / 10 FROM table
Дает результат 1, 0.100, 0 соответственно
А для Оracle, PostGreSQL, MaxDB, MySQL 1, 0.1, 0.1
cast без сомнения самый универсальный способ (см. мой пост №1), но зная особенности конкретного сервера, можно их использовать для сокращения записи.
Отредактировано AVC — 01/03/2005, 09:10 |
|
Konstantine |
Отправлено: 01.03.2005, 13:28 |
|
Мастер участка
Группа: Модератор
Сообщений: 545
|
Да, забыл сказать СУБД .... SQL Server 2000..
ещё раз ПАСИБА всем
|
|