SQL可以处理AM但不能处理

时间:2013-11-27 21:41:01

标签: sql sql-server vb.net sql-server-2008 tsql

我的数据库存在问题。我正在使用SQL Server 2008.数据库中的表确实有一列用于存储时间,但由于它取决于客户端计算机上的Windows配置,因此我的记录看起来像这些

id|date     |time
1 | 1/1/2013| 3:05:43 PM
2 | 1/1/2013| 3:06:33 PM
3 | 1/1/2013| 4:05:54 PM
4 | 1/1/2013| 7:04:41 PM
5 | 1/1/2013| 3:25:43 p.m.
6 | 1/1/2013| 3:16:33 p.m.
7 | 1/1/2013| 4:55:54 p.m.
8 | 1/1/2013| 7:04:41 p.m.

我正在使用这个

convert(varchar, cast([time] as datetime),108)

我测试了一个查询,它只适用于以PM结尾的记录,但当查询包含以p.m结尾的记录时会导致错误。

由于它已经实现了软件,因此比使用完整的日期时间数据类型来存储日期和时间更容易处理它,就像存储在数据库中一样。

1 个答案:

答案 0 :(得分:4)

在理想的世界中,您可以更改其存储方式以使用正确的DATETIME,但由于这不是一个选项,您可以在其中添加REPLACE()

SELECT CAST(REPLACE([time],'.','') AS TIME)
FROM Table1

演示:SQL Fiddle

如果需要CONVERT()

SELECT CONVERT(VARCHAR(8),CAST(REPLACE([time],'.','') AS TIME),108)
FROM Table1