64

我有一个表,其中有两个字段,例如“StartTime”和“EndTime”。两列的数据类型是时间。

所以表的值如下所示:

TableA:

            StartTime                EndTime
       ------------------         ----------------
        17:30:00.0000000          17:57:00.0000000

但我需要结果为

            StartTime                EndTime
       ------------------         ----------------
            05:30 PM                 05:57 PM

当我选择表格时。如何以 AM PM 格式获取时间?

4

13 回答 13

96

在 SQL 2012 中,您可以使用 Format() 函数。

https://technet.microsoft.com/en-us/library/hh213505%28v=sql.110%29.aspx

如果列类型为 (datetime),则跳过强制转换。

例子:

SELECT FORMAT(StartTime,'hh:mm tt') AS StartTime
FROM TableA
于 2015-08-14T15:16:01.847 回答
85

使用以下语法将时间转换为 AM PM 格式。

将字段名称替换为以下查询中的值。

select CONVERT(varchar(15),CAST('17:30:00.0000000' AS TIME),100)
于 2012-05-31T06:45:44.287 回答
16

以下是您可以使用的各种方法(取决于您的需要)。

使用时间数据类型:

DECLARE @Time Time = '15:04:46.217'
SELECT --'3:04PM'
       CONVERT(VarChar(7), @Time, 0),

       --' 3:04PM' --Leading Space.
       RIGHT(' ' + CONVERT(VarChar(7), @Time, 0), 7),

       --' 3:04 PM' --Space before AM/PM.
       STUFF(RIGHT(' ' + CONVERT(VarChar(7), @Time, 0), 7), 6, 0, ' '),

       --'03:04 PM' --Leading Zero.  This answers the question above.
       STUFF(RIGHT('0' + CONVERT(VarChar(7), @Time, 0), 7), 6, 0, ' ')

       --'03:04 PM' --This only works in SQL Server 2012 and above.  :)
       ,FORMAT(CAST(@Time as DateTime), 'hh:mm tt')--Comment out for SS08 or less.

使用日期时间数据类型:

DECLARE @Date DateTime = '2016-03-17 15:04:46.217'
SELECT --' 3:04PM' --No space before AM/PM.
       RIGHT(CONVERT(VarChar(19), @Date, 0), 7),

       --' 3:04 PM' --Space before AM/PM.
       STUFF(RIGHT(CONVERT(VarChar(19), @Date, 0), 7), 6, 0, ' '),

       --'3:04 PM' --No Leading Space.
       LTRIM(STUFF(RIGHT(CONVERT(VarChar(19), @Date, 0), 7), 6, 0, ' ')),

       --'03:04 PM' --Leading Zero.
       STUFF(REPLACE(RIGHT(CONVERT(VarChar(19), @Date, 0), 7), ' ', '0'), 6, 0, ' ')

       --'03:04 PM' --This only works in SQL Server 2012 and above.  :)
       ,FORMAT(@Date, 'hh:mm tt')--Comment line out for SS08 or less.
于 2016-03-18T06:44:10.033 回答
6

这会像上午 11:30一样返回

select CONVERT(VARCHAR(5), FromTime, 108) + ' ' + RIGHT(CONVERT(VARCHAR(30), FromTime, 9),2)
from tablename
于 2014-06-27T07:35:43.813 回答
4
SELECT CONVERT(varchar, StartTime, 100) AS ST,
       CONVERT(varchar, EndTime, 100) AS ET
FROM some_table

或者

SELECT RIGHT('0'+ LTRIM(RIGHT(CONVERT(varchar, StartTime, 100),8)),8) AS ST,
       RIGHT('0'+ LTRIM(RIGHT(CONVERT(varchar, EndTime, 100),8)),8) AS ET
FROM some_table
于 2012-05-31T06:43:55.303 回答
3
> SELECT CONVERT(VARCHAR(30), GETDATE(), 100) as date_n_time
> SELECT CONVERT(VARCHAR(20),convert(time,GETDATE()),100) as req_time
> select convert(varchar(20),GETDATE(),103)+' '+convert(varchar(20),convert(time,getdate()),100)

> Result (1):- Jun  9 2018 11:36AM
> result(2):-  11:35AM
> Result (3):-  06/10/2018 11:22AM
于 2018-06-09T06:08:14.507 回答
3

选择 CONVERT(varchar(15),CAST('17:30:00.0000000' AS TIME),100)

除了空间问题外,几乎可以完美运行。如果将其更改为:

select CONVERT(varchar(15),CAST('17:30:00.0000000' AS TIME),22)

...然后你得到空间。此外,如果要转换的列已经是TIME格式,如果直接引用它,则可以跳过强制转换。

最终答案

select CONVERT(varchar(15),StartTime,22)
于 2020-03-26T19:40:37.920 回答
1

多种功能,但这将为您提供所需的功能(在 SQL Server 2008 上测试)

编辑:以下内容不仅适用于time类型,也适用于 a datetime

SELECT SUBSTRING(CONVERT(varchar(20),StartTime,22), 10, 11) AS Start, SUBSTRING(CONVERT(varchar(20),EndTime,22), 10, 11) AS End FROM [TableA];

于 2012-05-31T06:46:51.130 回答
1

试试这个:

select CONVERT(VARCHAR(5), ' 4:07PM', 108) + ' ' + RIGHT(CONVERT(VARCHAR(30), ' 4:07PM', 9),2) as ConvertedTime
于 2014-07-29T08:35:46.087 回答
0

试试这个:

select CONVERT(varchar(15),CAST('2014-05-28 16:07:54.647' AS TIME),100) as CreatedTime
于 2014-07-29T08:08:05.387 回答
0
    select right(convert(varchar(20),getdate(),100),7)
于 2017-06-15T19:01:11.697 回答
0

使用上面@Saikh 的答案,第二个选项,您可以在时间本身和 AM 或 PM 之间添加一个空格。

REVERSE(LEFT(REVERSE(CONVERT(VARCHAR(20),CONVERT(TIME,myDateTime),100)),2) + ' ' + SUBSTRING(REVERSE(CONVERT(VARCHAR(20),CONVERT(TIME,myDateTime),100)),3,20)) AS [Time],

我知道混乱,但这是我选择的解决方案。奇怪的是 CONVERT() 不会自动添加该空间。SQL Server 2008 R2

于 2019-02-06T03:48:56.160 回答
0
  1. 声明 @iniTme 时间 = '03:15:30'
  2. 声明 @endTme 时间 = '15:15:30'
  3. 选择格式(CAST(@iniTme 作为日期时间),'hh:mm tt')
  4. 选择格式(CAST(@endTme 作为日期时间),'hh:mm tt')
  5. 03:15 AM
  6. 下午 3:15
于 2022-02-14T15:58:27.857 回答