2011-01-25 111 views
3

喜 我試圖爲VARCHAR日期字段(如20100320)轉換爲真正的日期字段一樣SQL VARCHAR到日期

'dd/mm/yyyy' (e.g. 20/03/2010).

我已經嘗試了兩種方式: 一)

(SELECT MIN(CAST(A.DateOfAction AS Date)) AS Expr1 
      FROM  ResAdm.Action A 
      WHERE (A.PersonID = P.PersonID)) 

    AS 'Period From', 

b)

(SELECT MIN(CONVERT(DATE, A.DateOfAction, 103)) AS Expr1 
      FROM  ResAdm.Action A 
      WHERE (A.PersonID = P.PersonID)) 

    AS 'Period From', 

既產生像

YYYY-MM-DD的結果(例如2010-03-20)

,但我想像

日/月/年(例如20/03/2010)

任何幫助將認識的結果。 謝謝。

回答

1
Declare @date nvarchar(100) 
set @date = '20100320' 
select convert(varchar, CONVERT(datetime, @date, 109), 103) 

您可以使用

convert(varchar, CONVERT(datetime, A.DateOfAction, 109), 103) 
+0

它也適用於Ashish。非常感謝您的幫助。 – Shariful 2011-01-25 13:42:40

+0

不僅僅是懶得使用「varchar」,但它也是一個非常不好的習慣。當你只使用「varchar」而沒有定義的長度時,你實際上得到的「varchar(30)」可能比你實際需要的更多或更少。如果它少,那麼你將有無聲截斷和有趣的時間調試。 – 2011-01-25 14:19:34

5

試試這個:

select convert(varchar(8), convert(datetime, min(a.DateOfAction), 112), 103) 

你的問題是,一旦你有一個日期格式,SQL Server將轉儲它在其默認的日期格式,你發現的是yyyy-mm-dd。您需要將date轉換爲varchar才能獲得所需的格式。但要從日期轉換,您需要先轉換爲日期! 112是yyyymmdd的格式,103是dd/mm/yyyy的格式,所以這就是爲什麼你需要這些格式。 (Books Online reference for date formats