2017-02-16 13 views
2

Я пытаюсь преобразовать время UTC в pst, и я могу это сделать. но я хочу округлить значение минут до '00: 00: 00 '.Как округлить значение времени в минутах?

, что я написал:

SELECT [TASK_NUMBER] 
    , dateadd(hour,datediff(hour,getdate(),dateadd(mi,30,START_TIME),START_TIME),getutcdate()) as START_TIME 
    , dateadd(hour,datediff(hour,getdate(),dateadd(mi,30,END_TIME),END_TIME),getutcdate()) as END_TIME 
    from table1 

вход:

2017-02-01 12:44:15.160 || 2017-02-01 23:44:15.160 

2017-02-01 13:44:15.160 || 2017-02-03 02:44:15.160 

выход:

2017-02-01 12:00:00 || 2017-02-01 23:00:00 

2017-02-01 13:00:00 || 2017-02-03 02:00:00 
+0

То есть не округлять, а отрезать, вот способ: ** выбрать топ 100 cast ((cast (cast (START_TIME в качестве даты) как char (10)) + '' + cast (cast (START_TIME как время) как char (3)) + '00: 00 ') как datetime) из ... ** – Avithohol

+0

Мне все равно нужно преобразовать время UTC в PST-время с тем же Query ... hiw do i Do that –

ответ

1

Одним из вариантов является Format() если 2012+

Select Format(START_TIME,'yyyy-MM-dd HH:00:00') 
     ,Format(END_TIME,'yyyy-MM-dd HH:00:00') 
From YourTable 

Или вы можете использовать простой обращенного()

Select convert(varchar(13),START_TIME,121)+':00:00' 
     ,convert(varchar(13),END_TIME,121) +':00:00' 
From YourTable 

возвращений

2017-02-01 12:00:00 2017-02-01 23:00:00 
2017-02-01 13:00:00 2017-02-03 02:00:00 
+0

Мне еще нужно преобразовать время из UTC в PST, а затем мне нужны эти изменения округления значения часов –

+0

Спасибо .. Я искал, чтобы это было проще. То, что было правильно –

+0

@Looking_for_answers Извините, у меня была голова, что Start/End был уже преобразованный в PST. Я подозреваю, что вы просто вложили dateadd(). Если вам нужна помощь, просто дайте мне знать –

1
CREATE TABLE tblTempTestTableStack 

(DataColumn1 DATETIME, DataColumn2 DATETIME) 

INSERT INTO tblTempTestTableStack 

SELECT SUBSTRING('2017-02-01 12:44:15.160 || 2017-02-01 23:44:15.160', 1, 23) 
      , SUBSTRING('2017-02-01 12:44:15.160 || 2017-02-01 23:44:15.160', 30, 23) 

UNION ALL 

SELECT SUBSTRING('2017-02-01 13:44:15.160 || 2017-02-03 02:44:15.160', 1, 23) 
      , SUBSTRING('2017-02-01 13:44:15.160 || 2017-02-03 02:44:15.160', 30, 23) 


SELECT CAST(CONVERT(DATE, DataColumn1) AS VARCHAR(10)) + ' ' + 
     RIGHT('00' + CAST(DATEPART(HH, DataColumn1) AS VARCHAR(2)), 2) + ':00:00' + ' || ' 
     + CAST(CONVERT(DATE, DataColumn2) AS VARCHAR(10)) + ' ' + 
     RIGHT('00' + CAST(DATEPART(HH, DataColumn2) AS VARCHAR(2)), 2) + ':00:00' 


FROM tblTempTestTableStack 
1

Это не округление, но отрезав, вот так:

select top 100 cast((cast(cast(START_TIME as date) as char(10)) + ' ' + cast(cast(START_TIME as time) as char(3)) + '00:00') as datetime) from tablename 
1
SELECT DATEADD(HOUR, 
    DATEPART(HOUR, START_TIME), 
    CAST(FLOOR(CAST(START_TIME AS FLOAT)) AS DATETIME)) 
FROM table1