sql - 对存储在 ms sql server 的 char 列中的日期或整数值使用关系运算符是否有效?
问题描述
我已经开发了 5 年。但这对我来说是全新的。最近我正在研究旧版应用程序,其中date
和integer
值存储CHAR
在ms sql server
. 令人震惊的事情(至少对我来说,因为我以前从未想过这个方向)是关系运算符使用date
存储在CHAR
列中的值。
恐怕这会有性能问题。这是正确的还是我错了?ms sql server
在应用关系运算符之前会发生任何隐式转换或转换?或者这是正常的ms sql server
吗?
我们计划迁移它并想检查我是否可以继续进行此设置或date
需要存储在DATE
类型列中并integer
在int
类型列中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'
请指教。
解决方案
不要将日期存储为字符串。请改用相关date
的 -like 数据类型。
虽然像这样的字符串格式YYYY/MM/DD
允许您进行相等和不等比较和排序,但会弹出其他限制,例如:
- 日期操作,例如添加或减去间隔,对于字符串来说是乏味的
- 无法强制执行数据完整性(如何确保您的字符串是有效日期?)
要解决这些问题,您很快就会发现自己在查询中将字符串转换为日期,这是非常低效的。
推荐阅读
- android - 在 Android Q 中访问 /proc/net/tcp
- angular - 使用它的路线为 Angular 应用程序生成站点地图
- haskell - 将 yesod-auth 后端与 SPA 前端相结合
- apache-spark - 在请求之间“缓存” Spark 数据集的最佳方法是什么?
- java - 我无法在java中拆分字符串?
- c++ - 用于检查我们是否有有效数独的辅助函数
- c - 给定 C 中的文件名,如何仅读取 75 个字符的每一行?
- ios - 在不使用位置的情况下获取 iOS 用户的国家名称
- sql-server - 以编程方式为用户定义的数据类型 (UDDT) 生成 DDL 语句
- django - 移动目录并返回后未找到模块错误