DATEADD SQL 2008 в следующий раз и следующая дата

#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