Member 12926744 Ответов: 1

Как получить все времена в день с интервалом 30 минут в SQL


Всем привет,
Мне нужно получить все время в день в формате 12 часов с интервалом 30 минут , то есть мне нужно получить вывод как

о/р
1:00AM
1:30AM
1:00PM
1:30PM
10:00AM
10:30Am
10:00PM
10:30PM
11:00AM
11:00PM
11:30AM
11:30PM
12:00PM
12:30PM
2:00AM
2:00PM
2:30AM
2:30PM
и так далее

Что я уже пробовал:

select distinct CONVERT(varchar(15),CAST( dateadd(hour,number-1,'01-jan-2017' ) AS TIME),100) as slots from master..spt_values where number>1 and number<=24 order by slots


Это дает o/p как :
1:00AM
1:00PM
10:00AM
10:00PM
11:00AM
11:00PM
12:00PM
2:00AM
2:00PM
3:00AM
3:00PM
4:00AM
4:00PM
5:00AM
5:00PM
6:00AM
6:00PM
7:00AM
7:00PM
8:00AM
8:00PM
9:00AM
9:00PM

Но мне нужно еще и 30 минут

1 Ответов

Рейтинг:
12

CHill60

Вот один из способов:

;WITH q AS
    (
    SELECT  30 AS num
    UNION ALL
    SELECT  num + 30
    FROM    q
    WHERE num < 24 * 60
    )
SELECT  dateadd(MINUTE, num, cast('00:00:00' as time))
FROM    q


[EDIT]вот альтернатива, используя Ваш оригинальный метод - трюк состоит в том, чтобы преобразовать его в использование minutes в наборах по 30 штук
select distinct CAST( dateadd(minute,30 * (number-1),'01-jan-2017' ) AS TIME) as slots from master..spt_values where number>1 and number<=50 order by slots


Member 12926744

Большое вам спасибо за ваш ответ, но это даст его в формате 24 часа.Я хочу, чтобы он был в формате 12 часов с am и pm . Любая помощь будет очень признательна.

Member 12926744

выберите distinct CONVERT(varchar(15),CAST( dateadd(minute,30 * (number-1),'01-jan-2017' ) AS TIME),100) as slots from master..spt_values where number>1 and number<=50 order by slots
Спасибо, я получил ответ . Большое вам спасибо за вашу помощь.

CHill60

Ты меня опередил! Извините, я уронил форматирование, когда работал над своими решениями, и забыл его снова включить