我想在时间之前添加一个前导零(12 小时格式)
例子:
SELECT RIGHT('0000000'+CONVERT(VARCHAR(20), CONVERT(DATETIME, '01:00PM', 0), 100), 7)
结果是下午 1:00
我的预期结果是下午 1:00
但是,当我尝试下面的代码时,它可以工作
SELECT RIGHT('0000000'+'1:00PM',7)
我想知道为什么第一个查询没有给出预期的结果。
我想在时间之前添加一个前导零(12 小时格式)
例子:
SELECT RIGHT('0000000'+CONVERT(VARCHAR(20), CONVERT(DATETIME, '01:00PM', 0), 100), 7)
结果是下午 1:00
我的预期结果是下午 1:00
但是,当我尝试下面的代码时,它可以工作
SELECT RIGHT('0000000'+'1:00PM',7)
我想知道为什么第一个查询没有给出预期的结果。
试试这个
SELECT FORMAT (getdate(), 'hh:mmtt') as time
结果是:07:30AM
SELECT FORMAT (CONVERT(DATETIME, '01:00PM', 0), 'hh:mmtt') as time
结果是:01:00PM
如果你运行:
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)
这部分代码:
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 回答提供的选项。
只需一步一步尝试,看看发生了什么:
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