sql - 为什么 DATEDIFF 将这些日期解析为 dd/mm/yyyy?
问题描述
我愿意:
SELECT DATEDIFF(month, Convert(datetime,'01/10/2018',103),
Convert(datetime,'30/04/2019',103)) AS 'Month1',
DATEDIFF(month, '10/01/2018','04/30/2019') AS 'Months2',
DATEDIFF(month, '10/02/2018','05/01/2019') AS 'Months3'
请告诉我为什么它返回 6,6,7?
解决方案
前 6 个是 01/10/2018(2018 年 10 月 1 日)和 30/04/2019(2019 年 4 月 4 日)之间的差值(以月为单位)。CONVERT 调用是强制使用日期格式 103(即英国/法语,即 dd/mm/yyyy)解析第二个日期,这让我怀疑您的 SQL 实现设置为将它们解析为其他格式(例如美国:mm/dd/yyyy)。
第二个 6 是 2018 年 10 月 1 日(2018 年 10 月 1 日)和 2019 年 4 月 30 日(2019 年 4 月 30 日)之间的差值(以月为单位)。
7 是 10/02/2018(2018 年 10 月 2 日)和 05/01/2019(2019 年 5 月 1 日)之间的差值(以月为单位)。这些日期可以解析为 2 月 10 日和 1 月 5 日,但事实并非如此,这证实了您的 SQL 实现正在解析 mm/dd/yyyy 格式的日期。
如果您确实将日期作为字符串传递,我建议使用明确的格式(例如“2018 年 10 月 1 日”),因为它会使代码更清晰,更不脆弱。
推荐阅读
- firebase - 可能的连接问题?无法访问 Cloud Firestore 后端。后端在 10 秒内没有响应
- azure-functions - 通过 teamcity 和 octopus 使用 YAML 文件部署 Azure 功能
- console.log - 浏览器错误已记录到控制台
- javascript - GSAP 动画在加载时开始
- javascript - 分配之前使用的打字稿变量
- java - 如何在运行时强制更改 GWT 常量语言环境
- python - feature_names 与 graphviz 库不匹配的功能
- python - Tensorflow 模型输入形状错误:层序贯_11 的输入 0 与层不兼容:秩未定义,但层需要定义的秩
- mongodb - Mongo 文本搜索似乎没有使用初始条件来减少要搜索的文档数量
- mysql - mqsql 日期转换