Sql Varchar字段上的Datetime和Integer函数

Sql Varchar字段上的Datetime和Integer函数,sql,sql-server,database-design,database-schema,Sql,Sql Server,Database Design,Database Schema,我们正在重构一个奇怪的系统,在它的后端,应该存储为数字和日期列的值,以及适当设计的约束,都存储为varchar(仅使用UI验证)。问题是,在我们这样做的同时,我们的新系统必须开始运行,以便: 是否可以将此varchar列作为整数进行操作(例如,更低或更高的比较),并且,如果日期以相同的格式dd/MM/yyyy存储,是否可以将该varchar列也视为日期并使用函数作为:介于两者之间?是否需要这样做: SELECT Column1, Column2 FROM Table WHERE CONVERT(

我们正在重构一个奇怪的系统,在它的后端,应该存储为数字和日期列的值,以及适当设计的约束,都存储为varchar(仅使用UI验证)。问题是,在我们这样做的同时,我们的新系统必须开始运行,以便:


是否可以将此varchar列作为整数进行操作(例如,更低或更高的比较),并且,如果日期以相同的格式dd/MM/yyyy存储,是否可以将该varchar列也视为日期并使用函数作为:介于两者之间?

是否需要这样做:

SELECT Column1, Column2
FROM Table
WHERE CONVERT(datetime, DateColumn, 3) BETWEEN @StartDate AND @EndDate

可以添加计算列(或具有列的视图),如下所示:

对于性能问题,可以对计算列进行持久化和/或索引


但是,如果要更改结构,最好首先修复数据类型。

一个问题:根据您的经验,这是否会对性能造成很大的损失,或者不是一个问题。谢谢。这方面的性能不应该是一个大问题,除非你有大量的数据,并且已经等待了很长一段时间的结果。如果这是你所要求的,这是不可取的。如果您正在处理大量记录,并且将经常执行此查询,我建议您创建一个“实际日期-时间”列,这样您就不需要进行转换。@AbeMiessler当然,这是我们所做的,但对于我们的软件版本,当我们完成部署时,我们需要使用它修复遗留问题。谢谢
CONVERT(DATE, column_name, 103)