在SQL中将时间转换为12小时格式

Nit*_*esh 9 sql sql-server sql-server-2008

如何在SQL Server 2008中将24小时格式化时间转换为12小时格式化时间?

Dam*_*ver 24

您是否在时间类型的变量/列中有当前时间?如果是这样,很容易:

declare @t time
set @t = '14:40'

select CONVERT(varchar(15),@t,100)
Run Code Online (Sandbox Code Playgroud)

结果:

2:40PM
Run Code Online (Sandbox Code Playgroud)

如果它在一个datetime(2)变量中,那么在运行CONVERT之后你将不得不去除日期部分.如果它在一个字符串中,那么首先CONVERTtime,然后使用上面的代码.

  • @dportas - 如果它正在进入客户端应用程序,那么我同意,让该应用程序进行格式化会更好.另一方面,如果它是一个定义(比如说)导出到CSV文件的查询(以及任何希望此CSV的骨头系统想要AM/PM而不是ISO格式的日期时间值),那么我看不到这种伤害.由于我们关心格式,我们必须转换为字符串. (3认同)

小智 7

有时您需要内联:

SELECT CONVERT(varchar(15),  CAST(GETDATE() AS TIME), 100) as AmPmTime
Run Code Online (Sandbox Code Playgroud)


Jon*_*nce 6

要添加到rAdmin的注释,语法为:

CONVERT(data_type,expression,style_code)
Run Code Online (Sandbox Code Playgroud)

以下是您可以使用的其他一些样式代码:

SELECT
GETDATE() AS GetDate,
CONVERT(VARCHAR,GETDATE(),0) AS '0',
CONVERT(VARCHAR,GETDATE(),100) AS '100',
CONVERT(VARCHAR,GETDATE(),1) AS '1',
CONVERT(VARCHAR,GETDATE(),101) AS '101',
CONVERT(VARCHAR,GETDATE(),7) AS '7',
CONVERT(VARCHAR,GETDATE(),107) AS '107',
CONVERT(VARCHAR,GETDATE(),108) AS '108',
CONVERT(VARCHAR,GETDATE(),108) AS '108',
CONVERT(VARCHAR,GETDATE(),10) AS '10',
CONVERT(VARCHAR,GETDATE(),110) AS '110',
CONVERT(VARCHAR,GETDATE(),12) AS '12',
CONVERT(VARCHAR,GETDATE(),112) AS '112',
CONVERT(VARCHAR,GETDATE(),14) AS '14',
CONVERT(VARCHAR,GETDATE(),114) AS '114'
Run Code Online (Sandbox Code Playgroud)

试图发布结果集的图像,但我需要"获得超过10个声望来发布图像".


小智 5

Select Right(IsNull(Convert(Varchar,GetDate(),100),''),7)
Run Code Online (Sandbox Code Playgroud)