2013-01-03 4 views
0

Как назначить текущую дату конкретным временем?Как назначить текущую дату конкретному времени столбцу?

предположим, 8:00:00 утра до колонки EXIT_DT типа данных datetime ??

Я пробовал GETDATE() AS EXIT_DT, но он дает мне текущее время и время. Я использую Sql server 2005. Любая помощь?

Скажем, сегодня - 1/3/2013, и я хочу, чтобы мой результат возвращался как datetime datatype со значением 1/3/2013 8:00:00 AM. Если я запустил оператор ytd, результат будет 1/2/2013 8:00:00 AM

ответ

6

Эта формула всегда будет производить с 08:00 в течение дня она называется, и избегает манипулирования строк:

select DATEADD(day,DATEDIFF(day,'20010101',GETDATE()),'2001-01-01T08:00:00') 

старается избегать решений, которые преобразовывают и из строк - обработки значений даты и времени в виде строк являются одним из крупнейшие источники ошибок.

Он работает путем вычисления количества дней (как целое число), прошедших с 1 января 2001 года он добавляет, что такое же количество дней до 08:00 на 1 января 2001 года

+0

Спасибо, что это работает – 10e5x

+0

Другие ответы могут работать тоже, но уры очень короткие и сладкие. Умная! – 10e5x

0

Используйте Convert вместе с getdate() для получения определенных форматов.

например:

SELECT CONVERT(VARCHAR(30),GETDATE(),113) 
+0

Я старался, чтобы этого не достигло того, чего я хочу. и я хочу получить результат типа данных datetime, а не varchar (30). Любая дополнительная помощь? – 10e5x

+0

SELECT CONVERT (datetime, CONVERT (VARCHAR (30), GETDATE(), 113)) –

0

Это немного глупо, но это работает

select cast(cast(getdate() as date) as datetime) + '08:00:00' 

он бросает getdate() в date тем самым теряя часы, чем это бросает его datetime и добавляет 8 часов.

Если вы хотите, чтобы избежать неявного преобразования varchar в datetime, вы можете использовать эту версию:

select cast(cast(getdate() as date) as datetime) 
    + convert(datetime,'08:00:00',114) 
0

Это также работает. (1). преобразуйте сегодняшнюю дату на ISO format (yyyymmdd) (2). добавьте время, (3). конвертировать обратно в дату и время

Select convert(datetime, convert(varchar, getdate(),112) + ' ' + '8:00:00AM') 
--Results 
2013-01-03 08:00:00.000 

Если вам нужно в определенном формате, вам необходимо снова вернуться в varchar.

0
-- AM/PM -- 
SELECT TO_CHAR(sysdate, 'MM/DD/YYYY HH:MI:SS AM') FROM dual 
/

-- 24 hrs format -- 
SELECT TO_CHAR(sysdate, 'MM/DD/YYYY HH24:MI:SS') FROM dual 
/
Смежные вопросы