sql - 为什么在 SQL Server 中查询日期数据类型为 yyyymmdd 而不是 yyyy-mm-dd?
问题描述
就像标题所说的那样。我的教授在我的所有查询中标记了点,因为我以这种格式查询日期数据类型:yyyymmdd
. 例子; 之间的日期yyyymmdd
。而不是yyyy-mm-dd
.
我只是想知道我是否可以为这些观点提出任何论据,因为这似乎很简单,因为查询仍然有效。
解决方案
反对使用yyyy-mm-dd
(没有时间)的一个很好的论点是,根据语言/DMY 设置1,SQL Server 可能会出错,从而导致不正确的查询2或错误:
set language british
select * from sys.objects where create_date between '2001-05-01' and '2001-05-30'
产生错误
Msg 242, Level 16, State 3, Line 3
The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.
这是因为,无论出于何种原因,SQL Server 都认为英国人使用yyyy-dd-mm
(我们不这样做)。
yyyymmdd
无论有效的语言设置如何,SQL Server都会明确解释。
请注意,这是特定于 SQL Server 的。
1请注意,我明确更改了此脚本中的设置,但即使没有它,某些用户的默认设置也可能导致相同的问题。
2例如来自评论的 Suraj Kumar 的例子:
select * from sys.objects where create_date between '2001-05-01' and '2001-05-11'
在 1 月 5 日至 11 月 5 日之间查询,而不是在 5 月 1 日至 11 日之间查询。
推荐阅读
- flutter - 如何在 Flutter Web 应用中设置页面描述?
- python - Pycharm通过脚本运行导入命令时无法导入torch,但可以在控制台导入使用
- django - 如何在 Django 中将 CharField 的查询集过滤为 Int?
- xml - 如何使用 XPath 从 XML 中的相似元素中读取多个嵌套节点?
- performance - 协程中的 waitforseconds 是否与 sephamore.WaitForSignal 相关?
- iis - IIS URL 重写存在非英文字符的问题
- c - Proper methods to Copy files/folders programmatically in C using POSIX functions
- linux-kernel - 平台设备和平台驱动链接
- php - How to convert string to boolean multiple condition in PHP
- java - Not able to map Json to java Object using Jackson and lombok