首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

mysql 年份两位数

基础概念

MySQL 是一个流行的关系型数据库管理系统(RDBMS),广泛用于各种应用程序的数据存储和管理。在 MySQL 中,日期和时间数据类型通常以 YYYY-MM-DDYYYY-MM-DD HH:MM:SS 的格式存储。

问题描述

当涉及到年份时,有时可能会遇到两位数表示的情况(如 YY 格式)。这种表示方法可能会导致一些问题,特别是在日期解析和比较时。

相关优势

  • 简洁性:两位数年份表示法在某些情况下可以简化数据输入和处理。
  • 兼容性:某些旧系统或应用程序可能仍然使用两位数年份表示法。

类型

  • 两位数年份:如 99 表示 19992099
  • 四位数年份:如 19992099

应用场景

  • 旧系统迁移:在将旧系统迁移到新系统时,可能会遇到两位数年份表示法。
  • 数据导入/导出:在处理外部数据源时,可能会遇到两位数年份表示法。

遇到的问题及原因

问题1:日期解析错误

原因:MySQL 默认情况下无法确定两位数年份是 19XX 还是 20XX

示例

代码语言:txt
复制
SELECT STR_TO_DATE('99-01-01', '%Y-%m-%d'); -- 结果为 NULL

问题2:日期比较错误

原因:两位数年份在比较时可能会产生歧义。

示例

代码语言:txt
复制
SELECT '99-01-01' < '00-01-01'; -- 结果为 NULL,因为 MySQL 无法确定年份

解决方法

方法1:使用 DATE_FORMATSTR_TO_DATE 函数

可以通过 DATE_FORMATSTR_TO_DATE 函数将两位数年份转换为四位数年份。

示例

代码语言:txt
复制
SELECT STR_TO_DATE(CONCAT('20', '99'), '%Y-%m-%d'); -- 结果为 '2099-01-01'

方法2:使用 YEAR 函数

可以通过 YEAR 函数提取年份并进行比较。

示例

代码语言:txt
复制
SELECT YEAR(STR_TO_DATE('99-01-01', '%y-%m-%d')) < YEAR(STR_TO_DATE('00-01-01', '%y-%m-%d')); -- 结果为 1 (TRUE)

方法3:使用 ALTER TABLE 修改列类型

如果表中的日期列使用的是两位数年份表示法,可以考虑修改列类型为四位数年份。

示例

代码语言:txt
复制
ALTER TABLE your_table MODIFY COLUMN your_date_column DATE;

参考链接

通过上述方法,可以有效解决 MySQL 中两位数年份表示法带来的问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • mysql时间与字符串相互转换

    date转字符串、date转时间戳、字符串转date、字符串转时间戳、时间戳转date,时间戳转字符串)用法,方便日后学习和查阅; 涉及的函数 date_format(date, format) 函数,MySQL...date_format() unix_timestamp() 函数 str_to_date(str, format) 函数 from_unixtime(unix_timestamp, format) 函数,MySQL...值含义秒%S、%s两位数字形式的秒( 00,01, ..., 59)分%I、%i两位数字形式的分( 00,01, ..., 59)小时 %H24小时制,两位数形式小时(00,01, ...,23)%h12...,Dec) %m 两位数字表示月份(01,02, ...,12)%c 数字表示月份(1,2, ...,12) 年%Y 四位数字表示的年份(2015,2016...)...%y  两位数字表示的年份(15,16...)文字输出 %文字 直接输出文字内容

    4.5K30

    mysql中关于时间统计的sql语句总结

    ’,0); -> 2000, 0 mysql> SELECT WEEK(’2000-01-01’,2); -> 52 YEAR(date) 返回 date 的年份,范围为 1000...注意,对于给定的日期参数是一年的第一周或最后一周的,返回的年份值可能与日期参数给出的年份不一致: mysql> SELECT YEARWEEK(’1987-01-01’); -> 198653...根据format字符串格式化date值: 函数的参数说明: %S, %s 两位数字形式的秒( 00,01, . . ., 59) %i 两位数字形式的分( 00,01, . . ., 59) %H 两位数字形式的小时...,24 小时(00,01, . . ., 23) %h, %I 两位数字形式的小时,12 小时(01,02, . . ., 12) %k 数字形式的小时,24 小时(0,1, . . ., 23) %l...( 01, 02, . . ., 12) %c 数字表示的月份( 1, 2, . . ., 12) %Y 四位数字表示的年份 %y 两位数字表示的年份 %% 直接值“%”

    3.6K10

    mysql 数据分析如何实现日报、周报、月报和年报?

    我已经掌握了mysql中按天统计,如何实现按年、按月、按周统计呢? 1、已掌握的技能:按天统计 实现以天为统计周期很简单。...MySQL日期格式化(format)取值范围。...值 秒 %S、%s 两位数字形式的秒( 00,01, ..., 59) 分 %I、%i 两位数字形式的分( 00,01, ..., 59) 小时 %H 24小时制,两位数形式小时(00,01, ...,...,Dec) %m 两位数字表示月份(01,02, ...,12) %c 数字表示月份(1,2, ...,12) 年 %Y 四位数字表示的年份(2015,2016...)...%y 两位数字表示的年份(15,16...) 文字输出 %文字 直接输出文字内容 把单个知识点,稍微提升到某块知识点,能让自己的知识技能再上一个台阶。

    2.9K30

    【重学 MySQL】三十二、日期时间函数

    【重学 MySQL】三十二、日期时间函数 获取日期、时间 函数 用法 CURDATE() ,CURRENT_DATE() 返回当前日期,只包含年、月、日 CURTIME() , CURRENT_TIME...N天以后的日期 TO_DAYS(date) 返回日期date距离0000年1月1日的天数 LAST_DAY(date) 返回date所在月份的最后一天的日期 MAKEDATE(year,n) 针对给定年份与所在年份中的天数返回一个日期...%y 表示两位数字表示年份 %M 月名表示月份(January,…) %m 两位数字表示月份(01,02,03。。。)...…) %H 两位数字表示小数,24小时制(01,02…) %h和%I 两位数字表示小时,12小时制(01,02…) %k 数字形式的小时,24小时制(1,2,3) %l 数字形式表示小时,12小时制...(1,2,3,4…) %i 两位数字表示分钟(00,01,02) %S和%s 两位数字表示秒(00,01,02…) %W 一周中的星期名称(Sunday…) %a 一周中的星期缩写(Sun.

    6710

    MySQL常用函数 原

    unix时间戳 from_unixtime(uxixtime) 返回unix时间戳的日期值 week(date) 返回日期date为一年中的第几周 year(date) 返回日期date的年份...date_format(date,fmt)函数,按照字符串fmt格式化日期date值,此函数能够按指定的格式显示日期,可以用到的格式符: MySQL中的日期和时间格式 格式符 格式说明...%s 和 %S 两位数字形式的秒(00,01,...,59) %i 两位数字形式的分(00,01,...,59) %H 两位数字形式的小时,24小时(00,01,...,23) %h 和 %...,December) %m 两位数字表示的月份(01,02,..,12) %c 数字表示的月份(1,2,...,12) %Y 4位数字表示的年份 %y 两位数字表示的年份 %% 直接值...MySQL中的日期间隔类型 表达式类型 描述 格式 hour 小时 hh minute 分 mm second 秒 ss year 年 YY month 月 MM day

    1.1K20

    mysql】日期与时间类型

    YEAR类型 YEAR类型用来表示年份,在所有的日期时间类型中所占用的存储空间最小,只需要1个字节的存储空间。...DATE类型 DATE类型表示日期,没有时间部分,格式为YYYY-MM-DD,其中,YYYY表示年份,MM表示月份,DD表示日期。需要3个字节的存储空间。...以YY-MM-DD格式或者YYMMDD格式表示的字符串日期,此格式中,年份两位数值或字符串满足YEAR类型的格式条件为:当年份取值为00到69时,会被转化为2000到2069;当年份取值为70到99时...以YY-MM-DD HH:MM:SS格式或者YYMMDDHHMMSS格式的字符串插入DATETIME类型的字段时,两位数年份规则符合YEAR类型的规则,00到69表示2000到2069;70到99表示...向TIMESTAMP类型的字段插入数据时,当插入的数据格式满足YY-MM-DD HH:MM:SS和YYMMDDHHMMSS时,两位数值的年份同样符合YEAR类型的规则条件,只不过表示的时间范围要小很多。

    4.2K20

    MySQL 中处理日期和时间(二)

    第二章节:TIMESTAMP 和 YEAR 类型 欢迎回到这个关于在 MySQL 中处理日期和时间的系列。在前面章节中,我们探讨 MySQL 的时态数据类型。...首先,MySQL 中的时间戳通常用于跟踪记录的更改,并且通常在每次记录更改时更新,而日期时间用于存储特定的时间值。...例如,如果你将列定义为 TIMESTAMP(2),则只会显示两位数年份(即使存储了完整值)。这种方法的优点是,如果你稍后决定要显示完整值,你可以更改表定义,完整值将会显示。...客户端的表设计器中,时间戳的精度可以在“长度”列中定义: 如果没有提供“长度”(如上例所示),Navicat 会显示完整字段,就好像它被声明为 TIMESTAMP(14): YEAR 类型 许多 DBA 选择将年份存储为整数...以下是 Navicat 表设计器中四位数格式的年份列示例: 因此,我们在表中看到完整年份: 总结 我们对五种 MySQL 时态数据类型的探索到此结束。下一部分将介绍一些有用的日期和时间函数。

    3.4K10
    领券