标准时间到军事时间

0 sql-server sql-server-2000

我对 SQL 有点陌生,我有看似简单的查询,但我似乎无法弄清楚函数的正确组合。我们从外部源接收时间数据作为五个字符的字符串,例如“0500p”。我想将此字符串转换为军用时间。输出所需的格式是五个字符的字符串,例如“17:00”。我试过了

SELECT CONVERT(CHAR(5),STD_TM,108)
Run Code Online (Sandbox Code Playgroud)

但我认为它并没有将我的“时间”识别为时间,因为它只是输出我输入的相同内容。

Aar*_*and 5

你不应该关心现在是 17:00 还是下午 5:00。SQL Server 最终如何存储时间是无关紧要的(格式化是针对表示层的)-您应该专注于将数据转换为正确的时间值并将其存储为正确的数据类型(在这种情况下可能是datetime,但在现代版本中) SQL Server,只是time)。

DECLARE @s char(5) = '0500p', @x datetime;

-- first convert it to a datetime-friendly format
SELECT @x = STUFF(@s,3,0,':') + 'm';

-- now some options for output:
SELECT @x, CONVERT(CHAR(5), @x, 108);
Run Code Online (Sandbox Code Playgroud)

结果:

1900-01-01 17:00:00.000        17:00
Run Code Online (Sandbox Code Playgroud)

请确保您只考虑将值格式化为表示层中的字符串。处理显示格式并不是真正的 SQL Server 的工作,无论如何,您的客户端工具更适合该转换。