-1

我想在时间之前添加一个前导零(12 小时格式)

例子:

SELECT RIGHT('0000000'+CONVERT(VARCHAR(20), CONVERT(DATETIME, '01:00PM', 0), 100), 7)

结果是下午 1:00

我的预期结果是下午 1:00

但是,当我尝试下面的代码时,它可以工作

SELECT RIGHT('0000000'+'1:00PM',7)

我想知道为什么第一个查询没有给出预期的结果。

4

4 回答 4

2

试试这个

SELECT FORMAT (getdate(), 'hh:mmtt') as time

结果是:07:30AM

SELECT FORMAT (CONVERT(DATETIME, '01:00PM', 0), 'hh:mmtt') as time

结果是:01:00PM

于 2020-06-05T11:30:22.753 回答
0

如果你运行:

 select '"' + CONVERT(VARCHAR(20), CONVERT(DATETIME, '01:00PM', 0), 100) + '"'

你会得到:

"Jan  1 1900  1:00PM"

我不确定你为什么认为'0000000'在最后七个字符前面加上和取走你想要的。

弄清楚你真正想要什么有点困难,因为你从一个具有你想要的格式的常量开始。

如果您想要一个零填充的 12 小时时间格式,您可以使用:

select right('0' + convert(varchar(255), convert(time, getdate()), 100), 7)
于 2020-06-05T11:27:03.743 回答
0

这部分代码:

CONVERT(VARCHAR(20), CONVERT(DATETIME, '01:00PM', 0), 100)

会给你这个结果:Jan 1 1900 1:00PM

这部分:

CONVERT(DATETIME, '01:00PM', 0)

将返回:1900-01-01 13:00:00.000

这里的目标是什么?我同意@SANDEEP 回答提供的选项。

检查演示

于 2020-06-05T11:27:50.720 回答
0

只需一步一步尝试,看看发生了什么:

SELECT CONVERT(DATETIME, '01:00PM', 0)
--> 1900-01-01T13:00:00Z

SELECT CONVERT(VARCHAR(20), CONVERT(DATETIME, '01:00PM', 0))
--> Jan 1 1900 1:00PM

SELECT '0000000'+CONVERT(VARCHAR(20), CONVERT(DATETIME, '01:00PM', 0))
--> 0000000Jan 1 1900 1:00PM

最后一个表达式最右边的七个字母显然是1:00PM.

正如其他人所建议的,请改用FORMAT(SQL Server 2012 及更高版本):

SELECT FORMAT(CONVERT(DATETIME, '01:00PM', 0), 'hh:mmtt')
--> 01:00PM
于 2020-06-05T11:31:48.613 回答