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

Jyi*_*ina 1 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)
Run Code Online (Sandbox Code Playgroud)

输出应该是:

07/06/2011 10:30:07 PM
Run Code Online (Sandbox Code Playgroud)

Aar*_*and 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));
Run Code Online (Sandbox Code Playgroud)

结果:

06/07/2011 10:30:07 PM
Run Code Online (Sandbox Code Playgroud)

如果你真的想要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));
Run Code Online (Sandbox Code Playgroud)

结果:

07/06/2011 10:30:07 PM
Run Code Online (Sandbox Code Playgroud)

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

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

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