首页 > 解决方案 > 对存储在 ms sql server 的 char 列中的日期或整数值使用关系运算符是否有效?

问题描述

我已经开发了 5 年。但这对我来说是全新的。最近我正在研究旧版应用程序,其中dateinteger值存储CHARms sql server. 令人震惊的事情(至少对我来说,因为我以前从未想过这个方向)是关系运算符使用date存储在CHAR列中的值。

恐怕这会有性能问题。这是正确的还是我错了?ms sql server在应用关系运算符之前会发生任何隐式转换或转换?或者这是正常的ms sql server吗?

我们计划迁移它并想检查我是否可以继续进行此设置或date需要存储在DATE类型列中并integerint类型列中ms sql server

我还注意到,所有日期都以“YYYY/MM/DD”格式的字符串存储在表中。

这是我创建并测试的测试表。

CREATE TABLE [dbo].[TestTable](
    [Date] [char](10) NULL,
    [Integer] [char](10) NULL
) ON [PRIMARY]
GO

SELECT * FROM TESTTABLE

在此处输入图像描述

SELECT * FROM TESTTABLE where [Date] > '1993/02/10'

在此处输入图像描述

请指教。

标签: sqlsql-servertsqldatedatetime

解决方案


不要将日期存储为字符串。请改用相关date的 -like 数据类型。

虽然像这样的字符串格式YYYY/MM/DD允许您进行相等和不等比较和排序,但会弹出其他限制,例如:

  • 日期操作,例如添加或减去间隔,对于字符串来说是乏味的
  • 无法强制执行数据完整性(如何确保您的字符串是有效日期?)

要解决这些问题,您很快就会发现自己在查询中将字符串转换为日期,这是非常低效的。


推荐阅读