#sql #sql-server #sql-server-2008
#sql #sql-сервер #sql-server-2008
Вопрос:
Нужна помощь в инструкции select для sql 2008.
Ниже приведена моя таблица:
ID Date Time Value
1 2014-01-01 00:00:00 00:00:00 A
2 2014-01-01 00:00:00 01:00:00 B
3 2014-01-01 00:00:00 02:00:00 C
4 2014-01-01 00:00:00 03:00:00 D
5 2014-01-01 00:00:00 04:00:00 E
--- ff. ---
23 2014-01-01 00:00:00 23:00:00 Y
24 2014-01-01 00:00:00 00:00:00 Z
25 2014-01-02 00:00:00 00:00:00 AA
26 2014-01-02 00:00:00 01:00:00 AB
27 2014-01-02 00:00:00 02:00:00 AC
Вопрос в том, как я могу узнать следующее значение Date
и Time
использовать оператор Select с DateAdd
функцией в SQL 2008?
Если дата 2014-06-01, а время 23:00, то следующая дата по-прежнему 2014-06-01. следующее время — 00:00
Если дата — 2014-06-01, а время — 00:00, то следующая дата — 2014-06-02. следующее время — 00:00
Пожалуйста, посоветуйте.
Большое вам спасибо.
С уважением,
Комментарии:
1. Вы хотите добавить часы?
2. Вы ищете разные дни?
3. Четко определите вашу проблему и предоставьте ожидаемый результат.
4. Извините, если это непонятно. Мне нужно знать, какова следующая дата и время .. если 2014-06-01 23:00, то следующая дата по-прежнему 2014-06-01, в следующий раз 00:00:00. если 2014-06-01 00:00, то следующая дата 2014-06-02, а в следующий раз 00:00:00. Надеюсь, это понятно. Спасибо.
5. Это кажется действительно запутанным иметь два представления полуночи и иметь одно и то же представление означает две разные полуночи в день. Вы уверены, что хотите / нуждаетесь в этом? Обычно только 00:00:00 представляет полночь в начале дня (или, в некоторых организациях, чтобы никогда не писать 00:00, чтобы избежать двусмысленности)
Ответ №1:
Попробуйте это, это работает для sql-server 2008 :
SELECT
id,
date,
time,
value,
CAST(DATEADD(hh, 1, date time) as DATE) extdate,
CAST(DATEADD(hh, 1, date time) as time(0)) nextTime
FROM yourtable
Ответ №2:
строка с id = 24 неверна, в остальном просто достигается следующее значение каждой строки :
select id, date, time, value,
cast(floor(cast(DateAdd(hour, 1, date time) as float)) as datetime) as nextdate,
convert(time, DateAdd(hour, 1, date time), 108) as nextTime
from tableName