Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Вычисляемые поля в SQL  [new]
serverokAsservelat
Member

Откуда:
Сообщений: 567
Помогите понять проблему: есть БД на SQL-server 2005. В одной таблице имеются некоторые столбцы. Например, их количество 10 (не принципиально). Все они имеют тип int. Создаю запрос вида SELECT id, title, worksHours/worksDay AS worksHoursPerDay FROM tableNAme не могу правильно преобразовать тип вычисляемого столбца при заносе данного значения в некоторое поле некоторого класса. Это поле имеет тип float, или double. Как привести правильно тип данных из таблицы в тип данных поля. (Язык используется c#)? Пробовал экспериментировать с типами в таблице, но эфеекта никакого...
Модератор: Тема перенесена из форума "Обсуждение нашего сайта".


Сообщение было отредактировано: 5 сен 09, 01:48
5 сен 09, 01:45    [7621319]     Ответить | Цитировать Сообщить модератору
 Re: Вычисляемые поля в SQL  [new]
serverokAsservelat
Member

Откуда:
Сообщений: 567
Да, вот пришла одна мысль пройтись по "окружной": типа float.Parse(reader["nameOfCell"].ToString())
Но, это конечно, не супер подход. Как же быть?
5 сен 09, 01:54    [7621336]     Ответить | Цитировать Сообщить модератору
 Re: Вычисляемые поля в SQL  [new]
Denis Reznik
Member

Откуда: Киев
Сообщений: 156
serverokAsservelat,

worksHours/worksDay AS worksHoursPerDay 

не совсем понятно в чём вопрос, и как именно вы эксперементировали с типами в таблице, но если worksHours и worksDay у вас типа int, то и worksHoursPerDay будет целочисленный.
5 сен 09, 03:03    [7621443]     Ответить | Цитировать Сообщить модератору
 Re: Вычисляемые поля в SQL  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36799
При делении инта на инт получается тоже инт. Хотите что-то другое - преобразовывайте делимое или делитель.
5 сен 09, 03:57    [7621514]     Ответить | Цитировать Сообщить модератору
 Re: Вычисляемые поля в SQL  [new]
Tako
Member

Откуда:
Сообщений: 65
А так
1.0*worksHours/worksDay AS worksHoursPerDay 
не получится?
5 сен 09, 13:10    [7621749]     Ответить | Цитировать Сообщить модератору
 Re: Вычисляемые поля в SQL  [new]
serverokAsservelat
Member

Откуда:
Сообщений: 567
Дело в том, что оба поля типа int. Но деление одного на другое не всегда дает тип int. Это и так ясно. Но результат обрезается. Как сохранять правильное вычисление? Если одному из полей назначить тип float, например, то результат получается float-типа, НО при получении из базы данных этого поля и попытке его значения сохранить в переменной некоторого класса выскакивает ошибка, мол, невозможно преобразовать тип. Причем тип переменной float. В чем причина - не знаю
6 сен 09, 00:30    [7622535]     Ответить | Цитировать Сообщить модератору
 Re: Вычисляемые поля в SQL  [new]
Glory
Member

Откуда:
Сообщений: 104760
serverokAsservelat
Дело в том, что оба поля типа int. Но деление одного на другое не всегда дает тип int. Это и так ясно.

В TSQL деление int на int всегда дает int. И поэтому совершенно не важно куда вы сохраните результат этого деления
6 сен 09, 00:40    [7622553]     Ответить | Цитировать Сообщить модератору
 Re: Вычисляемые поля в SQL  [new]
serverokAsservelat
Member

Откуда:
Сообщений: 567
Та, да. Тип int сохраняется, но результат обрезается до целого, например : 10 /3 даст 3. Но это не подходит. Я уже всех замучал, наверное, но не получается конвертировать Sql-й тип float в c#-й тип float. Хоть тресни.
6 сен 09, 23:12    [7623787]     Ответить | Цитировать Сообщить модератору
 Re: Вычисляемые поля в SQL  [new]
Glory
Member

Откуда:
Сообщений: 104760
serverokAsservelat
Та, да. Тип int сохраняется, но результат обрезается до целого, например : 10 /3 даст 3. Но это не подходит. Я уже всех замучал, наверное, но не получается конвертировать Sql-й тип float в c#-й тип float. Хоть тресни.

А для такой конвертации разве нужны какие то особые действия ?
6 сен 09, 23:58    [7623890]     Ответить | Цитировать Сообщить модератору
 Re: Вычисляемые поля в SQL  [new]
Denis Reznik
Member

Откуда: Киев
Сообщений: 156
Glory,

автор
Я уже всех замучал, наверное, но не получается конвертировать Sql-й тип float в c#-й тип float. Хоть тресни.


Попробуйте преобразовывать к Double, дело в том, что SQL-ный тип float может быть как 4-х так и 8-и байтовым.
7 сен 09, 23:14    [7629183]     Ответить | Цитировать Сообщить модератору
 Re: Вычисляемые поля в SQL  [new]
serverokAsservelat
Member

Откуда:
Сообщений: 567
СПАСИБО. Проблему с байтами понял и сразу все разрешилось.
8 сен 09, 13:20    [7631304]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить