You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何特定datetime字符串使用cast无法转换为date类型

问题根因

这是SQL默认的日期解析格式不匹配导致的:

  • 绝大多数数据库默认采用MM/DD/YYYY(月/日/年)的美式规则解析斜杠分隔的日期字符串
  • 第一条语句的'3/11/2021'可以被解析为2021年3月11日,月、日数值都在合法范围内,所以转换成功
  • 第二条语句的'26/02/2021'按默认美式规则解析时,会把开头的26识别为月份,而月份合法取值仅为1~12,数值超出范围导致转换失败
修复方案

如果你的日期字符串是DD/MM/YYYY(日/月/年)格式,不要依赖默认隐式转换规则,显式指定解析格式即可避免歧义,不同数据库对应写法参考:

  • MySQL:
SELECT STR_TO_DATE('26/02/2021 12:00:00 AM', '%d/%m/%Y %h:%i:%s %p') AS target_date;
  • SQL Server:
SET DATEFORMAT DMY;
SELECT CAST('26/02/2021 12:00:00 AM' AS DATE);
-- 或者用CONVERT显式指定格式
SELECT CONVERT(DATE, '26/02/2021 12:00:00 AM', 103);
  • Oracle:
SELECT TO_DATE('26/02/2021 12:00:00 AM', 'DD/MM/YYYY HH:MI:SS AM') FROM DUAL;
  • PostgreSQL:
SELECT TO_DATE('26/02/2021 12:00:00 AM', 'DD/MM/YYYY HH12:MI:SS AM');

内容的提问来源于stack exchange,提问作者r2deeptube

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 11:54:04