SQL Server - 查询存储为字符串的DateTime

时间:2011-11-11 21:16:48

标签: sql-server-2005

我有一个现有的数据库(无论出于何种原因?)将日期时间存储为字符串。我需要对在特定日期范围之间输入但没有运气的记录运行查询。

字符串字段的格式类似于1/25/2007 - 4:39 PM。我已经尝试了下面的查询,但当然它不起作用。任何帮助将不胜感激。

SELECT ID, CUSTOMER, ADD1, ADDZ, CITY, STATE, LASTD, ORDNUM
FROM dcar
WHERE  (STATE = N'OR') AND (CAST(dcar.LASTD AS datetime) BETWEEN convert(smalldatetime, '10/01/2011', 101) AND convert(smalldatetime, '10/31/2011', 101))

PS - 我不知道为什么开发人员决定以这种方式存储日期!!!!

2 个答案:

答案 0 :(得分:1)

我认为您应该能够将该字段强制转换为日期时间,如果您使用REPLACE函数删除日期和时间之间的短划线,如下所示:

SELECT ID, CUSTOMER, ADD1, ADDZ, CITY, STATE, LASTD, ORDNUM
FROM dcar
WHERE  (STATE = N'OR') AND
CAST(REPLACE(dcar.LASTD, ' -', '') AS DATETIME) BETWEEN '10/01/2011' AND '10/31/2011'

答案 1 :(得分:0)

看起来你并没有真正使用存储值的时间部分。如果是这样,这可能适合您:

使用字符串操作函数(http://msdn.microsoft.com/en-us/library/ms181984.aspx)提取字符串的日期部分,然后使用convert()将其转换为日期时间。例如,你可以使用CHARINDEX()来查找“ - ”的索引,然后使用SUBSTRING()来获取到那一点的字符。然后使用convert,传入http://msdn.microsoft.com/en-us/library/ms187928.aspx中记录的相应样式值。