我有一个带有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()
函数的输出?
答案 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日期时间写入字段,现在按预期执行。我很高兴知道我的直觉是正确的,这是一个错误的服务,是源。
感谢大家的建议和指导 - 非常非常感谢!