SQL服务器数据类型 - 日期VS Varchar(n)

时间:2015-02-23 08:35:58

标签: sql-server-2008 varchar sqldatatypes

我开发了一个系统,我将我的Date值存储在Varchar(n)列中。现在我被要求将列的数据类型更改为Date。 我的日期格式是dd / mm / yyyy,并且我在包含此Date列的表中有超过2000条记录,其类型为varchar。在不损害现有数据的情况下,将列的数据类型从varchar更改为Date的最佳方法是什么?我想知道在varchar列中存储Date值有什么缺点,以及在Varchar数据类型中存储Date值有什么好处。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

如果您可以保证您的列仅包含格式为dd/mm/yyyy的日期,并且在表DateColumnToChange上提供了名为AlterColumnTest的列,则可以执行以下操作:

SET DATEFORMAT dmy
ALTER TABLE [AlterColumnTest]
ALTER COLUMN DateColumnToChange DATETIME

第一行将确保对于脚本范围,日期格式将设置为日 - 月 - 年。

然后alter语句将尝试更改列的类型,但会首先尝试将当前值隐式转换为DateTime。如果此操作失败,则列的类型不会更改。如果所有值都可以强制转换为DateTime,它会将列类型更改为DateTime,其中的所有值现在都应该是DateTime类型。

将日期和时间值存储为特定类型的原因与在强类型语言中指定特定变量类型的原因相同。在处理数据时,它为您提供了额外的安全层。您的查询还会知道您在那里持有的数据类型,并会对此进行优化。它可以使列和数据比较更加容易,因为您可以利用内置比较,而无需显式转换(检查日期是否早于例如提供的日期)。

由于没有将DateTime值存储在除DateTime类型列之外的其他任何内容中,我确实没有理由(但是如果我错了,请在评论中纠正我)。