有没有办法将varchar列索引为日期时间?

时间:2010-09-28 00:45:55

标签: sql-server sql-server-2005 tsql

我正在查询包含所有有效日期时间的varchar列。在查询中,我将列转换为datetime。

请记住,将列的数据类型定义更改为datetime不是一个选项。只要相信我,这不是一个选择。

通过查询分析,我发现如果我可以在此列上添加索引,查询会快得多。但它是varchar。如果我添加了一个索引,它会根据它的varchar值进行索引,对吧?但我希望它能在日期时间值上编制索引,是吗?

我在这里可以为索引做些什么吗?

2 个答案:

答案 0 :(得分:6)

有效数据是第一优先级,因为任何将数据转换为DATETIME的方法都会返回1900年1月1日午夜时的值,此值与可接受的格式不匹配。

SQL Server没有基于函数的索引,因此您的选项是:

  1. A computed column,假设您可以使用ALTER TABLE语句向表中添加列。您可以在此之后索引此列。
  2. indexed view (AKA materialized view),假设您的数据符合要求
  3. 从原始文件克隆的临时表(如果您愿意,可以进行调整),从现有表中导入数据,以便对其进行索引和操作

答案 1 :(得分:3)

您是否考虑过在这些生成的表格之上构建索引视图?您可以在视图中定义varchar-to-datetime转换,然后索引该结果列。

有关详细信息,请参阅Improving Performance with SQL Server 2005 Indexed Views。我不是使用索引视图的专家,我只读过它们。因此,我会在您的情况下确定它是否是正确的解决方案。