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

Откуда:
Сообщений: 89
Как вытащить или отделить целую и дробную часть?
К примеру есть число 5,45
Необходимо перевести в время то есть 5*60+45=345
Как это можно сделать в SQL?
Заранее благодарен!!!
10 фев 10, 09:19    [8321093]     Ответить | Цитировать Сообщить модератору
 Re: Дробная часть  [new]
SHKoder
Member

Откуда: Moscow city
Сообщений: 616
MSDN
ROUND
в диктанте три-четыре варнинга, но в общем компилируется
10 фев 10, 09:20    [8321098]     Ответить | Цитировать Сообщить модератору
 Re: Дробная часть  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
skais
Необходимо перевести в время то есть 5*60+45=345
А как быть с числом 5.60 ?
10 фев 10, 09:22    [8321112]     Ответить | Цитировать Сообщить модератору
 Re: Дробная часть  [new]
koJIo6ok
Member

Откуда: РБ
Сообщений: 950
Паганель
skais
Необходимо перевести в время то есть 5*60+45=345
А как быть с числом 5.60 ?

:)
10 фев 10, 09:26    [8321131]     Ответить | Цитировать Сообщить модератору
 Re: Дробная часть  [new]
SHKoder
Member

Откуда: Moscow city
Сообщений: 616
как маленький ей Богу

1. округляешь свое число флоат до целых с правилом уменьшать и не округлять в большую сторону по математике (читай BOL)
2. своё округленное вычитаешь из исходного, получаешь дробную часть
3. имеешь две переменные @целая_часть + @дробная_часть
в диктанте три-четыре варнинга, но в общем компилируется
10 фев 10, 09:28    [8321142]     Ответить | Цитировать Сообщить модератору
 Re: Дробная часть  [new]
SHKoder
Member

Откуда: Moscow city
Сообщений: 616
для ленивых:

set language english
declare @value float
set @value = 5.6
declare @d_value float
declare @c_value float
set @c_value = round(@value, 0, 1)
set @d_value = @value - @c_value
select @value, @c_value, @d_value


в диктанте три-четыре варнинга, но в общем компилируется
10 фев 10, 09:32    [8321169]     Ответить | Цитировать Сообщить модератору
 Re: Дробная часть  [new]
SHKoder
Member

Откуда: Moscow city
Сообщений: 616
а.... Вам во время!!!
сорри
я не правильно понял вас
тогда опять же BOL и фантазия вам в помощь
в диктанте три-четыре варнинга, но в общем компилируется
10 фев 10, 09:34    [8321177]     Ответить | Цитировать Сообщить модератору
 Re: Дробная часть  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
SHKoder,
я, кажется, понял, Вы ко мне обращаетесь?
так у меня проблема не в реализации, а в понимании задачи автора
и вопрос свой я задавал именно автору

извините, если получилось, что как будто я спрашивал что-то у Вас
невнятно выразился я просто
10 фев 10, 09:36    [8321189]     Ответить | Цитировать Сообщить модератору
 Re: Дробная часть  [new]
Залётный
Guest
Паганель
skais
Необходимо перевести в время то есть 5*60+45=345
А как быть с числом 5.60 ?


А что с ним не так?
По логике ТС получаем 5*60+60=360 минут. Все правильно - 6 часов.
10 фев 10, 10:14    [8321460]     Ответить | Цитировать Сообщить модератору
 Re: Дробная часть  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
Залётный
Паганель
А как быть с числом 5.60 ?
А что с ним не так?
А то, что в "системе счисления" автора числа 5.60 и 6.00 равны
10 фев 10, 10:16    [8321479]     Ответить | Цитировать Сообщить модератору
 Re: Дробная часть  [new]
Залётный
Guest
Паганель
Залётный
Паганель
А как быть с числом 5.60 ?
А что с ним не так?
А то, что в "системе счисления" автора числа 5.60 и 6.00 равны

Ну да, именно так ) А 5,121 равно 7 часов 1 минута. Но какая разница, может это так и надо автору. Неизвестно же какая у него задача, может так ему удобнее и эффективнее хранить и обрабатывать какие-то времена.

P.S.: но, честно говоря, читая вопрос автора, я сам не верю в то, что щас сказал насчет удобства и эффективности :)
10 фев 10, 10:24    [8321535]     Ответить | Цитировать Сообщить модератору
 Re: Дробная часть  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
Залётный
может так ему удобнее и эффективнее
Ага
как найти в таблице время, равное шести?
where field = 6.00
или
where (field = 6.00 or field = 5.60)
?
что удобнее и эффективнее?

про задачи поиска по диапазонам и сортировки я просто молчу
10 фев 10, 10:32    [8321584]     Ответить | Цитировать Сообщить модератору
 Re: Дробная часть  [new]
Залётный
Guest
Паганель
А то, что в "системе счисления" автора числа 5.60 и 6.00 равны

Но, кстати, есть еще более большая проблема. По определению, числа 5.6, 5.60 и 5.600 равны, а в "системе счисления" автора они все разные. И если он будет хранить это поле как вещественное, то как же нужно вычислять время из числа 5.6?
10 фев 10, 10:41    [8321646]     Ответить | Цитировать Сообщить модератору
 Re: Дробная часть  [new]
Залётный
Guest
Паганель
как найти в таблице время, равное шести?

Так автор поэтому и спрашивает, как перевести в минуты. Можно предположить, что ему никогда не нужно искать время, равное шести часам, а всегда нужно искать время, равное 360 минутам.
10 фев 10, 10:44    [8321688]     Ответить | Цитировать Сообщить модератору
 Re: Дробная часть  [new]
VILor
Member

Откуда:
Сообщений: 35
Может так ?

declare @vl float, @vl2 int, @h int, @m int
set @vl = 6.7
set @h = cast(@vl as int) -- часы
set @m = (@vl - @h) * 60 -- минуты
print 'Часов : ' + cast(@h as varchar) + ' Минут : ' + cast(@m as varchar)

Часов : 6 Минут : 42
10 фев 10, 14:23    [8323695]     Ответить | Цитировать Сообщить модератору
 Re: Дробная часть  [new]
Залётный
Guest
VILor
Может так ?

declare @vl float, @vl2 int, @h int, @m int
set @vl = 6.7
set @h = cast(@vl as int) -- часы
set @m = (@vl - @h) * 60 -- минуты
print 'Часов : ' + cast(@h as varchar) + ' Минут : ' + cast(@m as varchar)

Часов : 6 Минут : 42


Автор же ясно написал как ему надо:
skais
К примеру есть число 5,45
Необходимо перевести в время то есть 5*60+45=345


следовательно 6.7 по мнению автора должно быть равно 6*60+7=367
10 фев 10, 14:42    [8323920]     Ответить | Цитировать Сообщить модератору
 Re: Дробная часть  [new]
VILor
Member

Откуда:
Сообщений: 35
Залётный
VILor
Может так ?

declare @vl float, @vl2 int, @h int, @m int
set @vl = 6.7
set @h = cast(@vl as int) -- часы
set @m = (@vl - @h) * 60 -- минуты
print 'Часов : ' + cast(@h as varchar) + ' Минут : ' + cast(@m as varchar)

Часов : 6 Минут : 42


Автор же ясно написал как ему надо:
skais
К примеру есть число 5,45
Необходимо перевести в время то есть 5*60+45=345


следовательно 6.7 по мнению автора должно быть равно 6*60+7=367


А что тут непонятного ? Осталось сложить 6 * 60 + 42 = 402
10 фев 10, 14:53    [8324031]     Ответить | Цитировать Сообщить модератору
 Re: Дробная часть  [new]
skais
Member

Откуда:
Сообщений: 89
Так я же и не говорил, что решить не могу, просто хотелось выслушать и найти более изящное решение. А Вы тут целый консилиум развели.
Вот мое решение:

60*FLOOR(durata)+100*(durata-FLOOR(durata))
где durata = 5,45

Просто надеялся, что есть функция для получения дробной части числа без этих махинаций.
Но ответа так и не получил.
Всем спасибо!!!
11 фев 10, 09:32    [8326855]     Ответить | Цитировать Сообщить модератору
 Re: Дробная часть  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
skais
Вот мое решение:
60*FLOOR(durata)+100*(durata-FLOOR(durata))
где durata = 5,45
А откуда взялось волшебное число 100 ?


skais
А Вы тут целый консилиум развели.
Надеюсь, Вы сделали из этого консилиума соответствующие выводы
Например, что данные так хранить нельзя

skais
Но ответа так и не получил.
От меня Вы не получили ответа,
потому что я ждал ответа на свой уточняющий вопрос (про число 5.60)
И ниже я еще написал, что я без выяснения этого вопроса понять задачу не могу
Но ответа я так и не получил
11 фев 10, 09:47    [8326944]     Ответить | Цитировать Сообщить модератору
 Re: Дробная часть  [new]
skais
Member

Откуда:
Сообщений: 89
автор

А откуда взялось волшебное число 100 ?
надо же дробную часть перевести в целую 0,45->45.

автор

Например, что данные так хранить нельзя

С этим я полностью согласен, но это не моя забава, я всего лишь пытаюсь привести чужие данные(данные берутся из других источников) к какому-то более принятому стандарту.


автор

потому что я ждал ответа на свой уточняющий вопрос (про число 5.60)

Такого числа не существует в данном источнике по-крайней мере, а даже если бы и существовала, то предложенное решение выдало бы 360 минут, что тоже самое.

автор

И ниже я еще написал, что я без выяснения этого вопроса понять задачу не могу

Задача проста, перевидите из этого формата h,mm в минуты.
То есть 5,45 =>345
Вот и все!
11 фев 10, 10:00    [8327038]     Ответить | Цитировать Сообщить модератору
 Re: Дробная часть  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
skais
надо же дробную часть перевести в целую 0,45->45
Надеюсь, Вы не будете отрицать,
что десятичная дробь 0,45 равна десятичной дроби 0,450 ?
Так почему на 100 умножаете, а не на 1000 ?
11 фев 10, 10:05    [8327074]     Ответить | Цитировать Сообщить модератору
 Re: Дробная часть  [new]
Кудряшка
Member

Откуда: Сидней
Сообщений: 2219
Паганель
Залётный
может так ему удобнее и эффективнее
Ага
как найти в таблице время, равное шести?
where field = 6.00
или
where (field = 6.00 or field = 5.60)
?



+1


или 4.120

только опять неясно это 4часа и 12 минут или 6 часов

(ну если, например, допускается 5.121 = 7часов 1 минута)
11 фев 10, 10:46    [8327516]     Ответить | Цитировать Сообщить модератору
 Re: Дробная часть  [new]
хз кто
Guest
skais
Задача проста, перевидите из этого формата h,mm в минуты.
То есть 5,45 =>345
Вот и все!


А можно я переведу?
У меня получилось 5.45=>750.
Вот и все!

Автор, вы хоть поняли о чем был консилиум-то?
11 фев 10, 10:49    [8327555]     Ответить | Цитировать Сообщить модератору
 Re: Дробная часть  [new]
Glory
Member

Откуда:
Сообщений: 104751
Кудряшка

+1


или 4.120

только опять неясно это 4часа и 12 минут или 6 часов

(ну если, например, допускается 5.121 = 7часов 1 минута)

Мы вплотную столкнулись с временным порадоксом Эйнштейна ))
11 фев 10, 10:50    [8327564]     Ответить | Цитировать Сообщить модератору
 Re: Дробная часть  [new]
skais
Member

Откуда:
Сообщений: 89
После запятой всегда только две цифры, которые означают минуты от 00 до 59 и ничего другого.
0,45*1000 = 450 минут, а не как 45.
Какие еще могут быть здесь вопросы.
11 фев 10, 11:27    [8327992]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить