1

我需要将以下日期转换为输出,如图所示。我可以使用代码 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
4

2 回答 2

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. 区域格式令人困惑(读者会知道 2013 年 5 月 6 日是 5 月 6 日而不是 6 月 5 日吗?取决于他们来自哪里)甚至是危险的(如果他们将该字符串传回,您可能会在他们的意思时存储 6 月 5 日5 月 6 日)。

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

于 2013-08-02T15:51:13.633 回答
1

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

DATEPART(@adddate, hh) + ':' + DATEPART(@adddate, mi) + etc...
于 2013-08-02T15:37:37.397 回答