我被要求在SQL中编写一系列测试。其中许多是测试系统中某个DateTime列是否有效的日期。
考虑到所讨论的所有字段都是Datetime列,并且最终用户对它们所做的任何更改都是通过已经进行日期验证测试的GUI前端进行的,更不要说如果无效的用户通过了SQL连接器就会出现错误。
我的问题是,在什么情况下,DateTime专栏最终会持有一个无效的日期,即20/40/2018。
我们正在运行Server 2008
亲切的问候
哑光
发布于 2018-08-10 16:25:11
Server将不允许无效日期。在内部,DateTime列的日期部分只是一个数字/四个字节,表示1753年1月1日至1999年12月31日之间的日期。Server不知道任何有关日期的信息,也不会使用无效日期。试图保存无效日期将导致错误。
如果要确认这一点,请编写一些代码,尝试存储列中数字组的所有可能的数字组合。
但是,由于Server支持多种格式,因此有可能在不经意间存储错误的日期,但是应该由您的业务逻辑层来处理。例如,有人可能会进入07/06/2018,将日期定为6月7日。在大多数情况下,当需要将DateTime表示为字符串时,可以使用ISO8601 DateTime格式来避免这种情况。
发布于 2018-08-21 18:05:37
尽管正如其他答案所指出的那样,Server将不允许在datetime列中存储无效的日期数据,但更大的问题可能是,是什么使日期在特定应用程序的上下文中有效。
例如,如果你要处理的是活的人的出生日期,那么你不太可能接受1756-04-08的日期,因为这表明一个人已经262岁了。也许您需要构建一组测试,以确保前端只能插入符合业务规则标准的数据。
发布于 2018-08-10 16:17:00
只有一种情况下:那个sql服务器有一个错误。所有其他的测试都是无关的-它总是运行到SQL有一个错误。
嗯,另一种可能是有人不够聪明,无法将其存储为DateTime,但你排除了这种可能性。
https://dba.stackexchange.com/questions/215507
复制相似问题