Вычтите минуту от DateTime в SQL Server 2005

Предположим, что у меня есть поле даты и времени, значение которого 01.01.2000 8:30:00 и поле продолжительности, значение которого, говорит 0:15 (значение 15 минут)

Если я вычитаю эти два, я должен добраться 01.01.2000 8:15:00

Также, если я хочу вычесть 1:15 (означает 1 час 15 минут), вывод должен быть 01.01.2000 7:15:00

Я пробую SELECT DATEDIFF(minute, '00:15','2000-01-01 08:30:00');

Но вывод 52595055. Как я могу получить желаемый результат?

N.B. ~, Если я делаю SELECT dateadd(minute, -15,'2000-01-01 08:30:00'); , Я получу желаемый результат, но это включает парсинг мелкого поля.

Править:

Согласно ответам, все предлагают преобразовать все в минуты и затем вычесть - поэтому, если это - 1:30, я должен вычесть 90 минут. Это прекрасно. Какой-либо другой путь, не преобразовывая в минуты?

34
задан davmos 11 August 2015 в 13:38
поделиться

4 ответа

SELECT DATEADD(minute, -15, '2000-01-01 08:30:00'); 

Второе значение (в данном случае -15) должно быть числовым (т. Е. Не строкой типа «00: 15»). Если вам нужно вычесть часы и минуты, я бы порекомендовал разделить строку на:, чтобы получить часы и минуты, и вычесть, используя что-то вроде

SELECT DATEADD(minute, -60 * @h - @m, '2000-01-01 08:30:00'); 

, где @h - часовая часть вашей строки, а @m - минутная часть вашей строка

РЕДАКТИРОВАТЬ:

Вот способ лучше:

SELECT CAST('2000-01-01 08:30:00' as datetime) - CAST('00:15' AS datetime)
58
ответ дан 27 November 2019 в 16:38
поделиться

Вы хотите использовать DATEADD с отрицательной продолжительностью. например

DATEADD(minute, -15, '2000-01-01 08:30:00') 
4
ответ дан 27 November 2019 в 16:38
поделиться

Вы пробовали

SELECT DATEADD(mi, -15,'2000-01-01 08:30:00')

DATEDIFF - это разница между двумя датами.

3
ответ дан 27 November 2019 в 16:38
поделиться

Используйте DATEPART, чтобы разделить интервал, и DATEADD, чтобы вычесть части:

select dateadd(
     hh,
    -1 * datepart(hh, cast('1:15' as datetime)),
    dateadd(
        mi,
        -1 * datepart(mi, cast('1:15' as datetime)),
        '2000-01-01 08:30:00'))

или, мы можем сначала преобразовать в минуты (хотя OP предпочел бы этого не делать):

declare @mins int
select @mins = datepart(mi, cast('1:15' as datetime)) + 60 * datepart(hh, cast('1:15' as datetime)) 
select dateadd(mi, -1 * @mins, '2000-01-01 08:30:00')
1
ответ дан 27 November 2019 в 16:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: