SQL PM AM Результат - PullRequest
       1

SQL PM AM Результат

1 голос
/ 20 декабря 2011

у меня столик

Create Table TestDates
(
  TestDateId int identity (1,1),
  RunDateTime DateTime
)

См. Ниже данные

Insert into TestDates
(RunDateTime)
Values
(getdate())

Insert into TestDates
(RunDateTime)
Values
( DATEADD(DAY,  -1, GETDATE()))

Insert into TestDates
(RunDateTime)
Values
( DATEADD(DAY,  -2, GETDATE()))

Insert into TestDates
(RunDateTime)
Values
( DATEADD(DAY,  -3, GETDATE()))

Insert into TestDates
(RunDateTime)
Values
( DATEADD(Hour,  -34, GETDATE()))

Insert into TestDates
(RunDateTime)
Values
( DATEADD(Hour,  -12, GETDATE()))

Мне удается выполнить отдельный запрос, который приносит только время

SELECT DISTINCT 
DATENAME(hour, RunDateTime) + ':' + 
DATENAME(mi, RunDateTime) AS  DistinctDate
from TestDates

Но мне нужно указать время с PM / AM.

см. В желаемом выводе

Current Output     Desired Output

10:33                **10:33 AM**
20:31                **08:31 PM** 
8:33                 **08:33 AM**

Пожалуйста, совет

Ответы [ 5 ]

2 голосов
/ 20 декабря 2011

Если вы уверены, что хотите выполнить форматирование на стороне сервера, рассмотрите возможность использования функции форматирования. См. Есть ли способ получить даты в пользовательских форматах в SQL Server? .

Или, вы можете попробовать

right(convert(varchar, RunDateTime, 100), 7)

Edit:

select distinct right(convert(varchar, RunDateTime, 100), 7)
from TestDates
2 голосов
/ 20 декабря 2011
select distinct substring(convert(varchar(20),RunDateTime, 9), 13, 5) +' '
+ substring(convert(varchar(30),RunDateTime, 9), 25, 2) from
TestDates;

Проверено.Дает вам следующие результаты

1: 21 AM

11: 21 AM

11: 21 PM

1 голос
/ 20 декабря 2011

Если вы используете SQL 2008, вы можете сделать это:

select convert(nvarchar, cast(RunDateTime as time), 100) from TestDates

Вот вывод для этого:

9:31AM
9:31AM
9:31AM
9:31AM
11:31PM
9:31PM
1 голос
/ 20 декабря 2011
SELECT DISTINCT SUBSTRING(CONVERT(varchar, RunDateTime, 100), 13, 2) + ':'
+ SUBSTRING(CONVERT(varchar, RunDateTime, 100), 16, 2) + ' '
+ SUBSTRING(CONVERT(varchar, RunDateTime, 100), 18, 2) AS DistinctDate
from TestDates
0 голосов
/ 20 декабря 2011

Этот запрос возвращает вам часть AM / PM:

REVERSE(SUBSTRING(REVERSE(CONVERT(CHAR(26), getdate(),109)),1,2))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...