SQL VarChar转换为日期

3

你好,我正在尝试将一个VarChar日期字段(例如20100320)转换为真正的日期字段,如

'dd/mm/yyyy'(例如20/03/2010)。

我尝试了两种方法: a)

 (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年3月20日)

但我想要像这样的结果

dd/mm/yyyy (例如20/03/2010)

任何帮助都将不胜感激。 谢谢。

2个回答

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 参考)

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

你可以使用

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

仅使用“varchar”不仅是懒惰的,而且也是一个非常糟糕的习惯。当您仅使用未定义长度的“varchar”时,实际上会得到一个“varchar(30)”,其长度可能比您实际需要的更多或更少。如果长度不足,则会出现静默截断和有趣的调试时间。 - KM.
声明 @date nvarchar(10) 设置 @date = '20100320' 选择 convert(varchar(10), CONVERT(datetime, @date, 109), 103) - ashish.chotalia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接