将datetime转换为MM / dd / yyyy HH:MM:SS AM / PM

时间:2013-08-02 15:33:22

标签: sql sql-server-2008

我需要将以下日期转换为输出,如图所示。我可以使用代码101获取日期部分,但是当时我找不到任何将时间转换为HH的代码:MM:SS AM / PM?有什么想法吗?谢谢!

declare @adddate datetime

Set @adddate = 2011-07-06T22:30:07.5205649-04:00

Convert(varchar, @adddate, 101) + ' ' + 
    Convert(varchar, @adddate, 108)

输出应为:

07/06/2011 10:30:07 PM

2 个答案:

答案 0 :(得分:5)

您当前的SET甚至无效。如果您有一个来自字符串文字的有效日期时间值,则可以执行以下操作:

DECLARE @adddate DATETIME;

SET @adddate = '2011-07-06T22:30:07.521';

SELECT CONVERT(CHAR(11), @adddate, 103) 
  + LTRIM(RIGHT(CONVERT(CHAR(20), @adddate, 22), 11));

结果:

06/07/2011 10:30:07 PM

如果你真的想要m / d / y(你的问题不明确),使用样式22的路径会略短:

DECLARE @adddate DATETIME;

SET @adddate = '2011-07-06T22:30:07.521';

SELECT STUFF(CONVERT(CHAR(20), @adddate, 22), 7, 2, YEAR(@adddate));

结果:

07/06/2011 10:30:07 PM

然而,出于两个原因,这是一个坏主意:

  1. 区域格式令人困惑(读者是否知道05/06/2013是5月6日而不是6月5日?取决于他们来自哪里)甚至是危险的(如果他们将该字符串传回来,你可能会6月5日他们的意思是5月6日。

  2. 您的客户语言最好使用自己的Format()ToString()方法对其进行格式化,以便在最后一刻显示。

答案 1 :(得分:1)

convert中没有格式选项。您需要使用DATEPART()代替并从各个组件构建新字符串:

DATEPART(@adddate, hh) + ':' + DATEPART(@adddate, mi) + etc...