2011-12-20 39 views
1

我有小桌子SQL PM AM結果

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** 

請指點

回答

2
select distinct substring(convert(varchar(20),RunDateTime, 9), 13, 5) +' ' 
+ substring(convert(varchar(30),RunDateTime, 9), 25, 2) from 
TestDates; 

測試。爲您提供了以下結果

上午01點21

上午11:21

下午11:21

0

此查詢獲取你的AM/PM部分:

REVERSE(SUBSTRING(REVERSE(CONVERT(CHAR(26), getdate(),109)),1,2)) 
+0

你可以發佈所有查詢所需的結果 – 2011-12-20 16:26:03

2

如果您確定要在服務器上做格式化方面,然後考慮使用格式化功能。見Is there a way to get dates with custom formats in SQL Server?

或者,你可以嘗試

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

編輯:

select distinct right(convert(varchar, RunDateTime, 100), 7) 
from TestDates 
+0

你可以發佈所有查詢所需的結果 – 2011-12-20 16:25:49

+1

@GregoryNozik你在開玩笑嗎?哦,等等,你已經在你的[個人資料](http://stackoverflow.com/users/940340/gregory-nozik)中列出了這麼多。也許你不是在開玩笑吧。查看編輯。 – GSerg 2011-12-20 16:30:33

1
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 
1

如果你在SQL 2008,你可以這樣做:

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

以下是輸出:

9:31AM 
9:31AM 
9:31AM 
9:31AM 
11:31PM 
9:31PM