我在从SQL Server检索时遇到问题,所以我发布了这个[问题][1]
我没有得到任何合适的答案。所以我已将列数据类型从 datetime
更改为 varchar
,现在它工作正常。
SELECT *
FROM test
WHERE (timeStamp BETWEEN '05-09-2013 18:23:57' AND '05-09-2013 18:23:59')
但是我的查询varchar
数据类型是否可以扮演datetime
的角色,并且varchar
我们也可以存储字符串,那么为什么sql提供datetime
数据类型呢?我知道varchar
占用的空间比datetime
多。我想知道其他原因。
将列的数据类型更改为 datetime
。如果你在 where 子句中使用 datetime 而不是 varchar,你可以进行查询:
select *
from test
where timeStamp between convert(datetime, '2013-09-05 18:23:57', 120) and convert(datetime, '2013-09-05 18:23:59', 120)
我很确定如果您使用 ISO 日期格式,即使使用隐式强制转换,它也可以工作:
select *
from test
where timeStamp between '2013-09-05 18:23:57' and '2013-09-05 18:23:59'
下面是有关转换和转换的详细信息。
除了空格之外的另一个原因是:
日期时间还有其他功能,例如选择日,年,月,小时,分钟,秒等,这样您就不必自己编写它。如果您使用 varchar,那么您有责任提供函数以供将来使用。您应该使用拆分功能来检索所需的日期部分。
另一个是,当您使用条件来比较月/日/年时,与日期时间相比,对 varchar 的查询工作速度较慢
始终使用正确的 DATETIME 数据类型来存储日期和时间值。有关更多信息,请参阅此内容http://beyondrelational.com/modules/2/blogs/70/posts/10902/understanding-datetime-column-part-iv.aspx