【问题标题】:Change Time to include Hours/Minutes AND AM/PM更改时间以包括小时/分钟和上午/下午
【发布时间】:2014-07-20 11:13:38
【问题描述】:

使用 SQL 并查看 w3schools 提供的关于日期转换 (http://www.w3schools.com/sql/func_convert.asp) 的列表,看起来如果没有一大堆东西放在前面,就很难获得小时/分钟和上午/下午时间。

我目前在查询中使用 24 小时时间

CONVERT(VARCHAR(5),sa.StartDateTime,108) ApptStartTime

这会吐出这样的东西

14:55

我正在寻找这样的东西

02:55 PM 

【问题讨论】:

标签: sql time


【解决方案1】:

这是一个可能的解决方案:

/* Sample SQL */

DECLARE @d1 datetime;
SELECT @d1 = '5/30/2014 21:46:59';
SELECT Convert(varchar, Convert(time, @d1), 100) AS ApptStartTime;
/* ApptStartTime=9:46PM */

DECLARE @d2 datetime;
SELECT @d2 = '5/30/2014 01:19:11';
SELECT Convert(varchar, Convert(time, @d2), 100) AS ApptStartTime;
/* ApptStartTime=1:19AM */

在你的情况下,你会使用:

SELECT Convert(varchar, Convert(time, sa.StartDateTime), 100) AS ApptStartTime;

编辑:

如果前导 0 和空格很重要,您可以使用:

SELECT Stuff(Right('0'+Convert(varchar, Convert(time, sa.StartDateTime), 100), 7), 6, 0, ' ') AS ApptStartTime;

【讨论】:

    【解决方案2】:

    这是一个添加前导0并在AM/PM之前插入空格的方法:

    SELECT STUFF(REPLACE(SUBSTRING(CONVERT(VARCHAR(20),sa.StartDateTime,100),13,7),' ','0'),6,0,' ');
    

    或者只是

    SELECT STUFF(SUBSTRING(CONVERT(VARCHAR(20),sa.StartDateTime,100),13,7),6,0,' ');
    

    如果你不需要前导 0

    请注意,如果可能的话,这在 UI/报告层中会更容易/更清晰。

    【讨论】:

    • 我实际上不需要在下午 2 点到 2:00 之前添加额外的零就可以了 :)
    【解决方案3】:

    顺便说一句 - 所以这篇文章可能有一个明确的答案 - 来自@Goat CO

    SELECT CONVERT(VARCHAR(15),CAST(sa.StartDateTime AS TIME),100
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-27
      • 1970-01-01
      • 2015-06-02
      • 1970-01-01
      • 1970-01-01
      • 2011-11-16
      • 2013-05-28
      • 1970-01-01
      相关资源
      最近更新 更多