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

Откуда:
Сообщений: 1574
ДД, как написать округление по 10 сек в большую сторону,
например
sek
51
2
37
123

надо чтоб было
sek
60
10
40
130
18 мар 13, 13:45    [14062363]     Ответить | Цитировать Сообщить модератору
 Re: округление 10 сек  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37139
; with a as (
    select 51 as n
    union all select 2
    union all select 37
    union all select 123
)
select
    (n / 10 + 1) * 10
from    a    
18 мар 13, 13:49    [14062392]     Ответить | Цитировать Сообщить модератору
 Re: округление 10 сек  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Гавриленко Сергей Алексеевич
; with a as (
    select 51 as n
    union all select 2
    union all select 37
    union all select 123
)
select
    (n / 10 + 1) * 10
from    a    

Здесь к значениям, кратным 10, прибавляется 10.
Надо как-то так:
; with a as (
    select 51 as n
    union all select 2
    union all select 37
    union all select 123
    union all select 50
)
select
    n,
    --(n / 10 + 1) * 10,
    case when n%10 = 0 then n else (n / 10 + 1) * 10 end,
    ceiling(n / 10.0) * 10
from    a
18 мар 13, 14:05    [14062501]     Ответить | Цитировать Сообщить модератору
 Re: округление 10 сек  [new]
оно?
Guest
Гавриленко Сергей Алексеевич,

таким макаром 10 округлится до 20, оно так и задумано?
18 мар 13, 14:06    [14062506]     Ответить | Цитировать Сообщить модератору
 Re: округление 10 сек  [new]
invm
Member

Откуда: Москва
Сообщений: 9633
Если еще учесть, что требование положительности значений не было озвучено, то:
; with a as (
    select 51 as n
    union all select 2
    union all select 37
    union all select 123
    union all select 50
    union all select -45
)
select
    n,
    (n / 10 + ((sign(n % 10) + 1) / 2)) * 10
from
 a
18 мар 13, 15:15    [14062945]     Ответить | Цитировать Сообщить модератору
 Re: округление 10 сек  [new]
Sekoka
Member

Откуда:
Сообщений: 73
Гость333
Надо как-то так:
; with a as (
    select 51 as n
    union all select 2
    union all select 37
    union all select 123
    union all select 50
)
select
    n,
    --(n / 10 + 1) * 10,
    case when n%10 = 0 then n else (n / 10 + 1) * 10 end,
    ceiling(n / 10.0) * 10
from    a


правильный будет вариант ceiling(n / 10.0) * 10, так как он округляет до целых чисел. В других вариантах с дробными числами просто прибавится 10 секунд.
Еще можно с FLOOR
; with a as (
    select 51. as n
    union all select 2
    union all select 37
    union all select 123
    union all select 50
)
select
    n,
    (n / 10 + 1) * 10,
    case when n%10 = 0 then n else (n / 10 + 1) * 10 end,
    ceiling(n / 10.0) * 10,
    (FLOOR((n-1) / 10) + 1) * 10
from    a
19 мар 13, 11:56    [14066339]     Ответить | Цитировать Сообщить модератору
 Re: округление 10 сек  [new]
iap
Member

Откуда: Москва
Сообщений: 47045
Sekoka,

но есть же ещё и ROUND
19 мар 13, 12:00    [14066368]     Ответить | Цитировать Сообщить модератору
 Re: округление 10 сек  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
Зачем так мучиться?
; with a as (
    select 51 as n
    union all select 2
    union all select 37
    union all select 123
)
select
    (n+9)/10*10
from    a    
19 мар 13, 12:02    [14066384]     Ответить | Цитировать Сообщить модератору
 Re: округление 10 сек  [new]
Dima T
Member

Откуда:
Сообщений: 15584
n - n % 10 + SIGN(n % 10) * 10
19 мар 13, 12:06    [14066417]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить