SQL Server datetime列转换为24h格式失败

时间:2012-01-24 20:31:06

标签: sql tsql datetime time

我有一个带有DateTime列的SQL Server 2008表,我希望将其转换为24h格式。

规范指导是使用以下内容:

select CONVERT(datetime, GetDate(), 121)

产生:

2012-01-24 15:22:27.340

完美。好的,所以应用这些知识,让我们用GetDate()表达式的列替换CONVERT

select top(5) CONVERT(datetime, LogTable.Timestamp, 121) from LogTable
order by LogTable.Id DESC

我们得到:

2012-01-24 03:25:47.933
2012-01-24 03:25:46.917
2012-01-24 03:25:46.547
2012-01-24 03:25:46.543
2012-01-24 03:25:46.543

我做错了什么?应该如何制作表达式以使CONVERT能够处理列而不是GetDate()函数的输出?

2 个答案:

答案 0 :(得分:1)

24h格式仅对字符串有用。当你使用:

convert(datetime, ...

您正在转换为日期时间。要显示24h,您必须转换为字符串,如:

convert(varchar(24), ...

如果您从varchar列开始,您可以convert到日期时间并返回到varchar以24小时格式显示。例如,要转换AM / PM varchar并在24小时内显示它:

select convert(varchar(16), convert(datetime, 'sep 01 2011 01:23PM', 100), 120)

这里,样式100用于解析。样式120用于格式化。

答案 1 :(得分:1)

我已经设法找到了解决这个问题的方法:服务在SQL表中写入时间戳是通过错误的格式化,将“裸”日期时间写入字段,有效地使它们显示为“AM”而不管它们何时出现到达。

我设法重新编写源代码,将24h日期时间写入字段,现在按预期执行。我很高兴知道我的直觉是正确的,这是一个错误的服务,是源。

感谢大家的建议和指导 - 非常非常感谢!