2015-12-29 96 views
2

我有一個場景,我必須在12小時內格式化時間,如果時間進入PM部分,那麼我應該在012小時格式中顯示時間爲PM。下面的 我已經實現了格式,但我無法找到如何提取12小時格式與當前的解決方案。轉換12小時格式的日期時間SQL Server

DECLARE @OpeningTime AS DATETIME 
DECLARE @ClosingTime AS DATETIME 

SET @OpeningTime = GETDATE() 
SET @ClosingTime = '2015-12-29 13:52:36' 

SELECT '<StoreTimings><Section><Days>' 
        + LEFT(DATENAME(WEEKDAY, GETDATE()), 3) 
        + '</Days><Timing>' 
        + CONVERT(VARCHAR(5), @OpeningTime, 108) 
        + (CASE WHEN DATEPART(HOUR,@OpeningTime) > 12 
          THEN ' PM' 
          ELSE ' AM' 
         END) + '-' 
        + CONVERT(VARCHAR(5), @ClosingTime, 108) 
        + (CASE WHEN DATEPART(HOUR, @ClosingTime) > 12 
          THEN ' PM' 
          ELSE ' AM' 
         END) + '</Timing></Section></StoreTimings>' 

的輸出如下

<StoreTimings><Section><Days>Tue</Days><Timing>10:31 AM-13:52 PM</Timing></Section></StoreTimings> 

我需要顯示01:52 PM13:52 PM

回答

1

你可以簡單地做這樣的:

DECLARE @OpeningTime AS DATETIME 
DECLARE @ClosingTime AS DATETIME 

SET @OpeningTime = GETDATE() 
SET @ClosingTime = '2015-12-29 13:52:36' 

SELECT CONVERT(VARCHAR, @OpeningTime, 100) 
SELECT CONVERT(VARCHAR, @ClosingTime, 100) 

FIDDLE DEMO

另請檢查MSDN list for CONVERT選項。

編輯:

要添加AM/PM和時間部分之間的空間。你可以做

select convert(varchar(10), @ClosingTime,120) + RIGHT(CONVERT(CHAR(20), @ClosingTime, 22), 11) 

FIDDLE DEMO

編輯:

要使用空間和HH獲得AM/PM格式的日期:MM AM/PM格式

select convert(varchar(10), @ClosingTime,120) + ' ' + REPLACE(REPLACE(RIGHT('0'+LTRIM(RIGHT(CONVERT(varchar,getdate(),100),7)),7),'AM',' AM'),'PM',' PM') 

FIDDLE DEMO

+0

你可以看到。我在'13:52 PM'或'01:52 PM'之間有一個空格,這是手動添加的,無論如何我需要添加它。 – DareDevil

+0

@DareDevil: - 請檢查更新的答案! –

+0

我只需要顯示'小時:分鐘'AM/PM'' – DareDevil

0

我已經通過以下腳本解決了我的問題。

DECLARE @OpeningTime AS DATETIME 
DECLARE @ClosingTime AS DATETIME 

SET @OpeningTime = '2015-12-30 00:30:36' 
--GETDATE() 
SET @ClosingTime = '2015-12-30 23:59:36' 



DECLARE @StoreOpeningTime AS NVARCHAR(8) 
DECLARE @StoreClosingTime AS NVARCHAR(8) 
DECLARE @Hours AS INT 
SET @Hours = 12 

SELECT @StoreOpeningTime = CASE WHEN DATEPART(HOUR, @OpeningTime) >= 12 
          THEN RIGHT('0' 
             + (CONVERT(VARCHAR(2), DATEPART(HOUR, 
                  @OpeningTime) 
              - @Hours)), 2) + ':' 
            + RIGHT('0' 
              + (CONVERT(VARCHAR(2), DATEPART(MINUTE, 
                  @OpeningTime))), 
              2) 
          ELSE CONVERT(VARCHAR(5), @OpeningTime, 108) 
         END 
    + (CASE WHEN DATEPART(HOUR, @OpeningTime) >= 12 THEN ' PM' 
      ELSE ' AM' 
     END) 


SELECT @StoreClosingTime = CASE WHEN DATEPART(HOUR, @ClosingTime) >= 12 
          THEN RIGHT('0' 
             + (CONVERT(VARCHAR(2), DATEPART(HOUR, 
                  @ClosingTime) 
              - @Hours)), 2) + ':' 
            + RIGHT('0' 
              + (CONVERT(VARCHAR(2), DATEPART(MINUTE, 
                  @ClosingTime))), 
              2) 
          ELSE CONVERT(VARCHAR(5), @ClosingTime, 108) 
         END 
    + (CASE WHEN DATEPART(HOUR, @ClosingTime) >= 12 THEN ' PM' 
      ELSE ' AM' 
     END) 


SELECT '<StoreTimings><Section><Days>' + LEFT(DATENAME(WEEKDAY, GETDATE()), 3) 
    + '</Days><Timing>' + @StoreOpeningTime + '-' + @StoreClosingTime 
    + '</Timing></Section></StoreTimings>' 

演示這個鏈接FIDDLE DEMO