2011-11-11 67 views
2

我有一个现有的数据库已设置(无论何种原因??)将日期时间存储为字符串。我需要运行一个查询,以查找在特定日期范围内输入但没有任何运气的记录。SQL Server - 存储为字符串的查询日期时间

字符串字段格式化为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 - 我不知道为什么开发者决定以这种方式存储日期!

回答

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' 
+0

非常感谢PaulStock!这就像一个魅力! – user10001110101

0

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

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

相关问题