varchar vs datetime in sql



我在从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

最新更新