我有一个表有两个字段,如“StartTime”和“EndTime”。两列的DataType是Time。
因此表的值如下所示:
TableA:
StartTime EndTime
------------------ ----------------
17:30:00.0000000 17:57:00.0000000
但我需要结果
StartTime EndTime
------------------ ----------------
05:30 PM 05:57 PM
当我选择表格时。如何在AM PM格式中获得时间?
答案 0 :(得分:69)
在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
答案 1 :(得分:59)
使用以下语法将时间转换为AM PM格式。
将字段名称替换为以下查询中的值。
select CONVERT(varchar(15),CAST('17:30:00.0000000' AS TIME),100)
答案 2 :(得分:11)
以下是您可以采取的各种方式(取决于您的需求)。
使用时间数据类型:
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.
使用 DateTime 数据类型:
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.
答案 3 :(得分: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
答案 4 :(得分:2)
select case
when DATEPART(hour,'17:30:00.0000000') > 12
then cast((DATEPART(hour,'17:30:00.0000000') - 12) as varCHAR(2)) + ':' + cast(DATEPART(minute,'17:30:00.0000000') as varCHAR(2)) + ' PM'
else cast(DATEPART(hour,'17:30:00.0000000') as varCHAR(2)) + ':' + cast(DATEPART(minute,'17:30:00.0000000') as varCHAR(2)) + ' PM'
end
答案 5 :(得分:2)
返回 11:30 AM
select CONVERT(VARCHAR(5), FromTime, 108) + ' ' + RIGHT(CONVERT(VARCHAR(30), FromTime, 9),2)
from tablename
答案 6 :(得分:2)
> 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
答案 7 :(得分:1)
多个功能,但这将为您提供所需(在SQL Server 2008上测试)
修改:以下内容不仅适用于time
类型,也适用于datetime
。
SELECT SUBSTRING(CONVERT(varchar(20),StartTime,22), 10, 11) AS Start, SUBSTRING(CONVERT(varchar(20),EndTime,22), 10, 11) AS End FROM [TableA];
答案 8 :(得分:1)
试试这个:
select CONVERT(VARCHAR(5), ' 4:07PM', 108) + ' ' + RIGHT(CONVERT(VARCHAR(30), ' 4:07PM', 9),2) as ConvertedTime
答案 9 :(得分:1)
选择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)
答案 10 :(得分:0)
试试这个:
select CONVERT(varchar(15),CAST('2014-05-28 16:07:54.647' AS TIME),100) as CreatedTime
答案 11 :(得分:0)
select right(convert(varchar(20),getdate(),100),7)
答案 12 :(得分: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