MySQL中的YEAR函数

一般这样认为 YEAR类型占用1个字节,并且在定义时可以指定显示的宽度为YEAR(4)或者YEAR(2),不过从MySQL5.6.6开始,YEAR(2)类型被自动装换为YEAR(4),YEAR(2)类型被禁用。

(一)YEAR(2)类型被自动装换为YEAR(4)

mysql>drop table if exists t;

Query OK,0 rows affected (0.01 sec)

mysql>create table t(a year(2));

Query OK,0 rows affected, 1 warning (0.00 sec)

mysql>show warnings\G;

***************************1. row ***************************

Level: Warning

Code: 1818

Message:YEAR(2) column type is deprecated. Creating YEAR(4) column instead.

1 row inset (0.00 sec)

ERROR:

No queryspecified

mysql>explain t;

+-------+---------+------+-----+---------+-------+

| Field |Type    | Null | Key | Default | Extra |

+-------+---------+------+-----+---------+-------+

| a     | year(4) | YES  |     |NULL    |       |

+-------+---------+------+-----+---------+-------+

1 row inset (0.00 sec)

mysql>insert into t select ‘14‘;

Query OK,1 row affected (0.00 sec)

Records:1  Duplicates: 0  Warnings: 0

mysql>select * from t;

+------+

| a    |

+------+

| 2014 |

+------+

1 row inset (0.00 sec)

mysql>

(二)存在当前表中的YEAR(2)类型仍旧作为YEAR(2)存在和处理,但是下面几种方式会自动转换为YEAR(4):

(1)alter表

alter table语句与导致重建表:

mysql> alter table t modify a year(2);

Query OK, 0 rows affected, 1 warning (0.00 sec)

Records: 0  Duplicates: 0  Warnings: 1

mysql> explain t;

+-------+---------+------+-----+---------+-------+

| Field | Type    | Null | Key | Default | Extra |

+-------+---------+------+-----+---------+-------+

| a     | year(4) | YES  |     | NULL    |       |

+-------+---------+------+-----+---------+-------+

1 row in set (0.00 sec)

mysql> alter table t modify a year(2);

Query OK, 0 rows affected, 1 warning (0.01 sec)

Records: 0  Duplicates: 0  Warnings: 1

mysql> show warnings;

+---------+------+---------------------------------------------------------------------+

| Level   | Code | Message                                                             |

+---------+------+---------------------------------------------------------------------+

| Warning | 1818 | YEAR(2) column type is deprecated. Creating YEAR(4) column instead. |

+---------+------+---------------------------------------------------------------------+

1 row in set (0.01 sec)

(2)PEAIR TABLE

如果check table时,数据库发现一张表中包含YEAR(2)列,就推荐使用YEAR(4)。

(3)mysql_upgrade

这个用于REPAIR TABLE的情况。

(4)在dump文件和重新装载dump文件时,被影响的数据值都会在dump和装载时存在潜在的影响。

时间: 2024-10-23 11:01:12

MySQL中的YEAR函数的相关文章

Mysql中使用find_in_set函数查找字符串

mysql有个表的字段的存储是以逗号分隔的,如domain字段login.s01.yy.com,s01.yy.com,s02.yy.com.现在要查找s01.yy.com这个.我们用like查找好像不是非常准确.那就试试mysql中的find_in_set函数吧. SELECT find_in_set('a','a,b,c,d') as test

Mysql中使用聚合函数对null值的处理

平时因为对于数据库研习的不深,所以在面试的时候问了一些平常遇到过的问题居然没法很肯定地回答出来,实在让自己很恼怒! 这次让我记忆深刻的一个问题是: 在mysql中使用聚合函数的时候比如avg(t),t是表中一个类型int型的字段,可为null,有三行数据,三行中的数据分别为:10,null,20,请问最后的结果是什么? 我的回答是15,在面试结束之后我尝试了一下结果没错,不过我对于聚集函数对null的处理貌似错了,我认为是聚合函数会将null值看作0,找了一番,博客中都认为是忽略null值,因为

MySQL 中的 FOUND_ROWS() 函数

移植sql server 的存储过程到mysql中,遇到了sql server中的: IF @@ROWCOUNT < 1 对应到mysql中可以使用 FOUND_ROWS() 函数来替换. 1. found_rows() 函数的文档: http://dev.mysql.com/doc/refman/5.6/en/information-functions.html#function_found-rows 1)found_rows() 的第一种使用情况(带有SQL_CALC_FOUND_ROWS,

Mysql中关于 group_concat函数详解

group_concat()主要功能:能将相同的行组合起来 完整的语法如下: group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符']) 基本查询 Sql代码   select * from aa; +------+------+| id| name |+------+------+|1 | 10||1 | 20||1 | 20||2 | 20||3 | 200 ||3 | 500 |+------+---

Mysql中常用的函数汇总

Mysql中常用的函数汇总: 一.数学函数abs(x) 返回x的绝对值bin(x) 返回x的二进制(oct返回八进制,hex返回十六进制)ceiling(x) 返回大于x的最小整数值exp(x) 返回值e(自然对数的底)的x次方floor(x) 返回小于x的最大整数值greatest(x1,x2,...,xn)返回集合中最大的值least(x1,x2,...,xn) 返回集合中最小的值ln(x) 返回x的自然对数log(x,y)返回x的以y为底的对数mod(x,y) 返回x/y的模(余数)pi(

SQLServer 中实现类似MySQL中的group_concat函数的功能

SQLServer中没有MySQL中的group_concat函数,可以把分组的数据连接在一起. 后在网上查找,找到了可以实现此功能的方法,特此记录下. SELECT a, stuff((SELECT ',' + b FROM #tb WHERE a = t.a FOR xml path('')), 1, 1, '' )AS b from  # tb AS t GROUP BY a; 先对a列进行分组,对分组中的b以Xml形式输出,再使用stuff将开关多出的,删掉. 具体实现参考:http:/

mysql中的group_concat函数的用法

1 本文通过实例介绍了MySQL中的group_concat函数的使用方法,比如select group_concat(name) . 2 MySQL中group_concat函数 3 完整的语法如下: 4 group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符']) 5 基本查询 6 mysql> select * from aa; 7 +------+------+ 8 | id| name | 9 +-

mysql中的ifnull()函数判断空值

我们知道,在不同的数据库引擎中,内置函数的实现.命名都是存在差异的,如果经常切换使用这几个数据库引擎的话,很容易会将这些函数弄混淆. 比如说判断空值的函数,在Oracle中是NVL()函数.NVL2()函数,在SQL Server中是ISNULL()函数,这些函数都包含了当值为空值的时候将返回值替换成另一个值的第二参数. 但是在MySQL中,ISNULL()函数仅仅是用于判断空值的,接受一个参数并返回一个布尔值,不提供当值为空值的时候将返回值替换成另一个值的第二参数. SELECT ISNULL

函数:MySQL中字符串匹配函数LOCATE和POSITION使用方法

1. 用法一 LOCATE(substr,str) POSITION(substr IN str) 函数返回子串substr在字符串str中第一次出现的位置.如果子串substr在str中不存在,返回值为0. mysql> SELECT LOCATE('bar', 'foobarbar'); -> 4 mysql> SELECT LOCATE('xbar', 'foobar'); -> 0 这个函数是大小写不敏感的.在MySQL3.23中,这个函数是字母大小写敏感的,当在MySQL

Mysql中常用的函数

控制流函数IFNULL(expr1,expr2)如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2.IFNULL()返回一个数字或字符串值,取决于它被使用的上下文环境. mysql> select IFNULL(1,0); -> 1 mysql> select IFNULL(0,10); -> 0 mysql> select IFNULL(1/0,10); -> 10 mysql> select IFNULL(1/0,'yes');