2011-01-25 43 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