1

我在从 SQL Server 检索时遇到问题,所以我发布了这个 [问题][1]

我没有得到任何合适的答案。所以我已将列数据类型从更改datetimevarchar,现在它工作正常。

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. 我想知道其他原因。

4

3 回答 3

5

将列的数据类型更改为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'

这是有关cast 和 convert的更多信息。

于 2013-09-16T09:19:54.687 回答
2

除了空间之外的另一个原因是:

Datetime还有其他功能,例如选择日、年、月、时、分、秒等,这样您就不必自己编写了。如果您使用varchar,那么您有责任提供功能以供将来使用。您应该使用拆分功能来检索您想要的日期部分。

另一个是当您使用条件来比较月/日/年时,与Datetime相比,对varchar的查询的工作速度较慢

于 2013-09-16T09:28:12.880 回答
1

始终使用正确的 DATETIME 数据类型来存储日期和时间值。有关更多信息,请参阅此 http://beyondrelational.com/modules/2/blogs/70/posts/10902/understanding-datetime-column-part-iv.aspx

于 2013-09-16T10:04:44.807 回答