2009-11-24 91 views
0

我想顯示日期時間爲例如。 09年12月1日下午11時22分45秒使用SQL查詢獲取自定義日期時間格式

目前我的格式是:

DATENAME(Month, (((MachineGroups.TimeAdded*10000000)+ 621355968000000000) -599266080000000000)/864000000000) + SPACE(1) + DATENAME(d, (((MachineGroups.TimeAdded*10000000)+ 621355968000000000) - 599266080000000000)/864000000000) +', ' + DATENAME(year, (((MachineGroups.TimeAdded*10000000)+621355968000000000) - 599266080000000000) /864000000000) + SPACE(1)+DATENAME (hour,(((MachineGroups.TimeAdded*10000000)+621355968000000000) - 599266080000000000)/864000000000) + ':' +DATENAME (minute,(((MachineGroups.TimeAdded*10000000)+ 621355968000000000) - 599266080000000000)/864000000000) + ':' +DATENAME (second,(((MachineGroups.TimeAdded*10000000)+ 621355968000000000) - 599266080000000000)/864000000000) AS Expr2 

尤斯上面我得到如。 2009年23點22分45秒

12月1日,我會嘗試使用 「MMM」 和 「YY」 的cuatom formata,但它沒有工作

任何建議??? 謝謝

有沒有辦法我可以使用上面的Datename屬性來獲得我想要的格式?

+1

ASP.NET和C#以何種方式與此問題相關?這聽起來像你只對SQL方面感興趣。另一方面,爲什麼你希望SQL能夠執行格式化而不是在你的ASP.NET代碼中執行它,你有什麼理由嗎? – 2009-11-24 15:08:00

+0

現在我們很好... – user175084 2009-11-24 15:10:37

+0

這是因爲我已經在很多地方完成了上述格式化...現在只需要對它進行更多一點的修改... – user175084 2009-11-24 15:14:37

回答

0

將該值作爲通用日期時間對象返回並在UI中進行格式化會更容易和更高效。

從數據庫返回格式化日期的動機是什麼?

+0

我已經完成了上述格式化很多地方...現在只需要修改它多一點...謝謝雖然 – user175084 2009-11-24 15:19:31

0

這將讓你的一切,但AM/PM:

聲明@myDate日期時間 集@myDate = GETDATE() 選擇LEFT(DATENAME(MM,@myDate),3)+ '' + RIGHT ('0'+ DATENAME(DD,@myDate),2)+','+ RIGHT(DATENAME(YY,@myDate),2)+''+ convert(varchar,(DATEPART(hour,@myDate) ))+':'+ convert(varchar,(DATEPART(minute,@myDate)))+':'+ convert(varchar,(DATEPART(second,@myDate)))

有多種方法可以實現上午/下午值,其中將是一個子字符串:

選擇Convert(VARCHAR,GETDATE(),109)

0

除了MONTHNAME(你已經在使用),請DATEPART。它也離9的CONVERT格式[通過CONVERT (VARCHAR(20), @datetime, 9)]不遠,所以你也可以操縱它。

另一個選擇是使用兩個轉換......這給你想要的東西,但時間在24小時格式:

SELECT CONVERT(VARCHAR(20), @datetime, 107) + ' ' + CONVERT (VARCHAR(20), @datetime, 108) 

使用不同的轉換功能和比特字符串操作,讓你12小時,上午/下午。或做這樣的事情:

SELECT CAST(DATEPART(hh, @datetime) - 12 AS VARCHAR) 
     + ':' + CAST(DATEPART(mi, @datetime) AS VARCHAR) 
     + ':' + CAST(DATEPART(ss, @datetime) AS VARCHAR) 
     + CASE WHEN DATEPART(hh, @datetime) BETWEEN 0 AND 11 THEN ' AM' ELSE ' PM' END 

無論這樣或操縱CONVERT的輸出是相當的,但他們是你的最佳選擇。

但是:正如其他人所指出的,雖然,這通常做得更好客戶端/ UI端,而不是SQL端。

0

您可以找到所有支持的SQL Server formats here

要以相當於Dec 1, 09 11:22:45 PM的格式進行選擇,可以使用格式7中的日期:Mon dd, yy。時間可以從格式109:mon dd yyyy hh:mi:ss:mmmAM (or PM)組裝。聯合:

select 
    convert(varchar(10), getdate(), 7) + 
    ' ' + 
    stuff(
     substring(
      convert(varchar(32), getdate(), 109) 
     ,13,14) -- Substring HH:mi:ss.mmmAM 
    ,9,4,' ') -- Replace .mmm by one space 

這應該打印:

Nov 24, 09 4:58:36 PM 

094之間的兩個空間的第二個保留給兩個數字的小時,比如晚上11:59:59。 :)

+0

有沒有辦法我可以使用Datename ????? – user175084 2009-11-24 18:38:22

+0

@unknown:我想你可以。但是使用convert的查詢更簡單,那麼爲什麼要這樣呢? – Andomar 2009-11-24 22:53:17