189 8069 5689

mysql怎么获取年月日,mysql 获取年月日

MYSQL中获取当前的年和月

select year(curdate()),month(curdate()),day(curdate());

创新互联建站自成立以来,一直致力于为企业提供从网站策划、网站设计、成都网站设计、网站制作、外贸营销网站建设、电子商务、网站推广、网站优化到为企业提供个性化软件开发等基于互联网的全面整合营销服务。公司拥有丰富的网站建设和互联网应用系统开发管理经验、成熟的应用系统解决方案、优秀的网站开发工程师团队及专业的网站设计师团队。

select weekofyear(curdate());

有点细微的差别,weekofyear(date)相当于week(date,3).

下面是week(date,Mode),取值的说明,根据自己的实际情况取自己想要的值

Mode 工作日 范围 Week 1 为第一周 ...

0 周日 0-53 本年度中有一个周日

1 周一 0-53 本年度中有3天以上

2 周日 1-53 本年度中有一个周日

3 周一 1-53 本年度中有3天以上

4 周日 0-53 本年度中有3天以上

5 周一 0-53 本年度中有一个周一

6 周日 1-53 本年度中有3天以上

7 周一 1-53 本年度中有一个周一

select date_format(now(),'%Y')

select date_format(now(),'%m')

select date_format(now(),'%e')

select date_format(now(),'%U')

select year(curdate()),month(curdate()),dayofyear(curdate()),weekofyear(curdate());

◆ TIME(expr)

提取一个时间或日期时间表达式的时间部分,并将其以字符串形式返回。

mysql SELECT TIME('2003-12-31 01:02:03');

- '01:02:03'

mysql SELECT TIME('2003-12-31 01:02:03.000123');

- '01:02:03.000123'

◆ TIMEDIFF(expr,expr2)

TIMEDIFF() 返回起始时间 expr 和结束时间expr2 之间的时间。 expr 和expr2 为时间或 date-and-time 表达式,两个的类型必须一样。

mysql SELECT TIMEDIFF('2000:01:01 00:00:00',

- '2000:01:01 00:00:00.000001');

- '-00:00:00.000001'

mysql SELECT TIMEDIFF('1997-12-31 23:59:59.000001',

- '1997-12-30 01:01:01.000002');

- '46:58:57.999999'

◆ TIMESTAMP(expr) , TIMESTAMP(expr,expr2)

对于一个单参数,该函数将日期或日期时间表达式 expr 作为日期时间值返回.对于两个参数, 它将时间表达式 expr2 添加到日期或日期时间表达式 expr 中,将theresult作为日期时间值返回。

mysql SELECT TIMESTAMP('2003-12-31');

- '2003-12-31 00:00:00'

mysql SELECT TIMESTAMP('2003-12-31 12:00:00','12:00:00');

- '2004-01-01 00:00:00'

◆ TIMESTAMPADD(interval,int_expr,datetime_expr)

将整型表达式int_expr 添加到日期或日期时间表达式 datetime_expr中。 int_expr 的单位被时间间隔参数给定,该参数必须是以下值的其中一个: FRAC_SECOND、SECOND、 MINUTE、 HOUR、 DAY、 WEEK、 MONTH、 QUARTER或 YEAR。

可使用所显示的关键词指定Interval值,或使用SQL_TSI_前缀。例如, DAY或SQL_TSI_DAY 都是正确的。

mysql SELECT TIMESTAMPADD(MINUTE,1,'2003-01-02');

- '2003-01-02 00:01:00'

mysql SELECT TIMESTAMPADD(WEEK,1,'2003-01-02');

- '2003-01-09'

◆ TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr2)

返回日期或日期时间表达式datetime_expr1 和datetime_expr2the 之间的整数差。其结果的单位由interval 参数给出。interval 的法定值同TIMESTAMPADD()函数说明中所列出的相同。

mysql SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01');

- 3

mysql SELECT TIMESTAMPDIFF(YEAR,'2002-05-01','2001-01-01');

- -1

◆ TIME_FORMAT(time,format)

其使用和 DATE_FORMAT()函数相同, 然而format 字符串可能仅会包含处理小时、分钟和秒的格式说明符。其它说明符产生一个NULL值或0。

若time value包含一个大于23的小时部分,则 %H 和 %k 小时格式说明符会产生一个大于0..23的通常范围的值。另一个小时格式说明符产生小时值模数12。

mysql SELECT TIME_FORMAT('100:00:00', '%H %k %h %I %l');

- '100 100 04 04 4'

◆ TIME_TO_SEC(time)

返回已转化为秒的time参数。

mysql SELECT TIME_TO_SEC('22:23:00');

- 80580

mysql SELECT TIME_TO_SEC('00:39:38');

- 2378

◆ TO_DAYS(date)

给定一个日期date, 返回一个天数 (从年份0开始的天数 )。

mysql SELECT TO_DAYS(950501);

- 728779

mysql SELECT TO_DAYS('1997-10-07');

- 729669

TO_DAYS() 不用于阳历出现(1582)前的值,原因是当日历改变时,遗失的日期不会被考虑在内。

请记住, MySQL使用“日期和时间类型”中的规则将日期中的二位数年份值转化为四位。例如, '1997-10-07'和 '97-10-07' 被视为同样的日期:

mysql SELECT TO_DAYS('1997-10-07'), TO_DAYS('97-10-07');

- 729669, 729669

对于1582 年之前的日期(或许在其它地区为下一年 ), 该函数的结果实不可靠的。

◆ UNIX_TIMESTAMP(), UNIX_TIMESTAMP(date)

若无参数调用,则返回一个Unix timestamp ('1970-01-01 00:00:00' GMT 之后的秒数) 作为无符号整数。若用date 来调用UNIX_TIMESTAMP(),它会将参数值以'1970-01-01 00:00:00' GMT后的秒数的形式返回。date 可以是一个DATE 字符串、一个 DATETIME字符串、一个 TIMESTAMP或一个当地时间的YYMMDD 或YYYMMDD格式的数字。

mysql SELECT UNIX_TIMESTAMP();

- 882226357

mysql SELECT UNIX_TIMESTAMP('1997-10-04 22:23:00');

- 875996580

当 UNIX_TIMESTAMP被用在 TIMESTAMP列时, 函数直接返回内部时戳值, 而不进行任何隐含的 “string-to-Unix-timestamp”转化。假如你向UNIX_TIMESTAMP()传递一个溢出日期,它会返回 0,但请注意只有基本范围检查会被履行 (年份从1970 到 2037, 月份从01到12,日期从 01 到31)。

假如你想要减去 UNIX_TIMESTAMP() 列, 你或许希望删去带符号整数的结果。

◆ UTC_DATE, UTC_DATE()

返回当前 UTC日期值,其格式为 'YYYY-MM-DD' 或 YYYYMMDD,具体格式取决于函数是否用在字符串或数字语境中。

mysql SELECT UTC_DATE(), UTC_DATE() + 0;

- '2003-08-14', 20030814

◆ UTC_TIME, UTC_TIME()

返回当前 UTC 值,其格式为 'HH:MM:SS' 或HHMMSS,具体格式根据该函数是否用在字符串或数字语境而定。

mysql SELECT UTC_TIME(), UTC_TIME() + 0;

- '18:07:53', 180753

◆ UTC_TIMESTAMP, UTC_TIMESTAMP()

返回当前UTC日期及时间值,格式为 'YYYY-MM-DD HH:MM:SS' 或YYYYMMDDHHMMSS,具体格式根据该函数是否用在字符串或数字语境而定。

mysql SELECT UTC_TIMESTAMP(), UTC_TIMESTAMP() + 0;

- '2003-08-14 18:08:04', 20030814180804

◆ WEEK(date[,mode])

该函数返回date 对应的星期数。WEEK() 的双参数形式允许你指定该星期是否起始于周日或周一, 以及返回值的范围是否为从0 到53 或从1 到53。若 mode参数被省略,则使用default_week_format系统自变量的值。请参见5.3.3节,“服务器系统变量”。

以下表说明了mode 参数的工作过程:

mysql SELECT WEEK('1998-02-20');

- 7

mysql SELECT WEEK('1998-02-20',0);

- 7

mysql SELECT WEEK('1998-02-20',1);

- 8

mysql SELECT WEEK('1998-12-31',1);

- 53

注意,假如有一个日期位于前一年的最后一周, 若你不使用2、3、6或7作为mode 参数选择,则MySQL返回 0:

mysql SELECT YEAR('2000-01-01'), WEEK('2000-01-01',0);

- 2000, 0

有人或许会提出意见,认为 MySQL 对于WEEK() 函数应该返回 52 ,原因是给定的日期实际上发生在1999年的第52周。我们决定返回0作为代替的原因是我们希望该函数能返回“给定年份的星期数”。这使得WEEK() 函数在同其它从日期中抽取日期部分的函数结合时的使用更加可靠。

假如你更希望所计算的关于年份的结果包括给定日期所在周的第一天,则应使用 0、2、5或 7 作为mode参数选择。

mysql SELECT WEEK('2000-01-01',2);

- 52

作为选择,可使用 YEARWEEK()函数:

mysql SELECT YEARWEEK('2000-01-01');

- 199952

mysql SELECT MID(YEARWEEK('2000-01-01'),5,2);

- '52'

◆ WEEKDAY(date)

返回date (0 = 周一, 1 = 周二, ... 6 = 周日)对应的工作日索引 weekday index for

mysql SELECT WEEKDAY('1998-02-03 22:23:00');

- 1

mysql SELECT WEEKDAY('1997-11-05');

- 2

◆ WEEKOFYEAR(date)

将该日期的阳历周以数字形式返回,范围是从1到53。它是一个兼容度函数,相当于WEEK(date,3)。

mysql SELECT WEEKOFYEAR('1998-02-20');

- 8

◆ YEAR(date)

返回date 对应的年份,范围是从1000到9999。

mysql SELECT YEAR('98-02-03');

- 1998

◆ YEARWEEK(date), YEARWEEK(date,start)

返回一个日期对应的年或周。start参数的工作同 start参数对 WEEK()的工作相同。结果中的年份可以和该年的第一周和最后一周对应的日期参数有所不同。

mysql SELECT YEARWEEK('1987-01-01');

- 198653

注意,周数和WEEK()函数队可选参数0或 1可能会返回的(0) w有所不同,原因是此时 WEEK() 返回给定年份的语境中的周。

mysql分别获取已有数据date中的年月日

以每24小时作为一份时间(而非自然日),根据用户的配置有两种工作模式:带状模式中,用户仅定义开始日期时,从开始日期(含)开始,每份时间1个分片地无限增加下去;环状模式中,用户定义了开始日期和结束日期时,以结束日期(含)和开始日期(含)之间的时间份数作为分片总数(分片数量固定),以类似取模的方式路由到这些分片里。

1. DBLE 启动时,读取用户在 rule.xml 配置的 sBeginDate 来确定起始时间

2. 读取用户在 rule.xml 配置的 sPartionDay 来确定每个 MySQL 分片承载多少天内的数据

3. 读取用户在 rule.xml 配置的 dateFormat 来确定分片索引的日期格式

4. 在 DBLE 的运行过程中,用户访问使用这个算法的表时,WHERE 子句中的分片索引值(字符串),会被提取出来尝试转换成 Java 内部的时间类型

5. 然后求分片索引值与起始时间的差,除以 MySQL 分片承载的天数,确定所属分片

1. DBLE 启动时,读取用户在 rule.xml 配置的起始时间 sBeginDate、终止时间 sEndDate 和每个 MySQL 分片承载多少天数据 sPartionDay

2. 根据用户设置,建立起以 sBeginDate 开始,每 sPartionDay 天一个分片,直到 sEndDate 为止的一个环,把分片串联串联起来

3. 读取用户在 rule.xml 配置的 defaultNode

4. 在 DBLE 的运行过程中,用户访问使用这个算法的表时,WHERE 子句中的分片索引值(字符串),会被提取出来尝试转换成 Java 内部的日期类型

5. 然后求分片索引值与起始日期的差:如果分片索引值不早于 sBeginDate(哪怕晚于 sEndDate),就以 MySQL 分片承载的天数为模数,对分片索引值求模得到所属分片;如果分片索引值早于 sBeginDate,就会被放到 defaultNode 分片上

与MyCat的类似分片算法对比

中间件

DBLE

MyCat

分片算法种类 date 分区算法 按日期(天)分片

两种中间件的取模范围分片算法使用上无差别

开发注意点

【分片索引】1. 必须是字符串,而且 java.text.SimpleDateFormat 能基于用户指定的 dateFormat 来转换成 java.util.Date

【分片索引】2. 提供带状模式和环状模式两种模式

【分片索引】3. 带状模式以 sBeginDate(含)起,以 86400000 毫秒(24 小时整)为一份,每 sPartionDay 份为一个分片,理论上分片数量可以无限增长,但是出现 sBeginDate 之前的数据而且没有设定 defaultNode 的话,会路由失败(如果有 defaultNode,则路由至 defaultNode)

【分片索引】4. 环状模式以 86400000 毫秒(24 小时整)为一份,每 sPartionDay 份为一个分片,以 sBeginDate(含)到 sEndDate(含)的时间长度除以单个分片长度得到恒定的分片数量,但是出现 sBeginDate 之前的数据而且没有设定 defaultNode 的话,会路由失败(如果有 defaultNode,则路由至 defaultNode)

【分片索引】5. 无论哪种模式,分片索引字段的格式化字符串 dateFormat 由用户指定

【分片索引】6. 无论哪种模式,划分不是以日历时间为准,无法对应自然月和自然年,且会受闰秒问题影响

运维注意点

【扩容】1. 带状模式中,随着 sBeginDate 之后的数据出现,分片数量的增加无需再平衡

【扩容】2. 带状模式没有自动增添分片的能力,需要运维手工提前增加分片;如果路由策略计算出的分片并不存在时,会导致失败

【扩容】3. 环状模式中,如果新旧 [sBeginDate,sEndDate] 之间有重叠,需要进行部分数据迁移;如果新旧 [sBeginDate,sEndDate] 之间没有重叠,需要数据再平衡

配置注意点

【配置项】1. 在 rule.xml 中,可配置项为 propertyname="sBeginDate" 、 propertyname="sPartionDay" 、 propertyname="dateFormat" 、 propertyname="sEndDate" 和 propertyname="defaultNode"

【配置项】2.在 rule.xml 中配置 propertyname="dateFormat",符合 java.text.SimpleDateFormat 规范的字符串,用于告知 DBLE 如何解析sBeginDate和sEndDate

【配置项】3.在 rule.xml 中配置 propertyname="sBeginDate",必须是符合 dateFormat 的日期字符串

【配置项】4.在 rule.xml 中配置 propertyname="sEndDate",必须是符合 dateFormat 的日期字符串;配置了该项使用的是环状模式,若没有配置该项则使用的是带状模式

【配置项】5.在 rule.xml 中配置 propertyname="sPartionDay",非负整数,该分片策略以 86400000 毫秒(24 小时整)作为一份,而 sPartionDay 告诉 DBLE 把每多少份放在同一个分片

【配置项】6.在 rule.xml 中配置 propertyname="defaultNode" 标签,非必须配置项,不配置该项的话,用户的分片索引值没落在 mapFile 定义

mysql数据库怎么获得当前日期

1.1 获得当前日期+时间(date + time)函数:now()

除了 now() 函数能获得当前的日期时间外,MySQL 中还有下面的函数:

current_timestamp() current_timestamp

localtime() localtime

localtimestamp() localtimestamp

这些日期时间函数,都等同于 now()。鉴于 now() 函数简短易记,建议总是使用 now() 来替代上面列出的函数。

1.2 获得当前日期+时间(date + time)函数:sysdate()

sysdate() 日期时间函数跟 now() 类似,不同之处在于:now() 在执行开始时值就得到了, sysdate() 在函数执行时动态得到值。

2. 获得当前日期(date)函数:curdate()

其中,下面的两个日期函数等同于 curdate(): current_date(),current_date

3. 获得当前时间(time)函数:curtime()

其中,下面的两个时间函数等同于 curtime():current_time(),current_time

4. 获得当前 UTC 日期时间函数:utc_date(), utc_time(), utc_timestamp()

在MySql中、怎样根据年份或者月份查询数据表中的数据?

下面以比较流行的mysql图形化管理工具Navicat为例,其他工具或者在命令行中以及编程语言中操作时的执行的sql语句是一样的。

1、假设在数据库中有一个名为testtest的表格,表格内容如下图所示,表中有三条记录是9月份的

2、打开一个查询窗口,输入查询语句select * from testtest where month(date)='9';,该语句表示查询testtest表格中9月份的记录

3、点击“运行”执行该sql语句,在下方可以看到已经查询到了9月份的三条记录

4、如需按年查询可输入select * from testtest where year(date)='2017';,2017代表需要查询的年份。如下图所示只查询到了一条记录是2017年的

mysql获取当前系统日期和时间

可以了解一下MySQL的时间戳(Timestamp)数据类型:

默认时间戳(Timestamp)类型的取值范围为'1970-01-01 00:00:01' UTC至'2038-01-19 03:14:07' UTC,数据精确到秒级别,该取值范围包含约22亿个数值,因此在MySQL内部使用4个字节INT类型来存放时间戳数据:

1、在存储时间戳数据时,先将本地时区时间转换为UTC时区时间,再将UTC时区时间转换为INT格式的毫秒值(使用UNIX_TIMESTAMP函数),然后存放到数据库中。

2、在读取时间戳数据时,先将INT格式的毫秒值转换为UTC时区时间(使用FROM_UNIXTIME函数),然后再转换为本地时区时间,最后返回给客户端。

(Timestamp)时间戳列可以有四张组合定义,其含义分别为:

1、当字段定义为timestamp,表示该字段在插入和更新时都不会自动设置为当前时间。

2、当字段定义为timestamp DEFAULT CURRENT_TIMESTAMP,表示该字段仅在插入且未指定值时被赋予当前时间,再更新时且未指定值时不做修改。

3、当字段定义为timestamp ON UPDATE CURRENT_TIMESTAMP,表示该字段在插入且未指定值时被赋值为"0000-00-00 00:00:00",在更新且未指定值时更新为当前时间。

4、当字段定义为timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,表示该字段在插入或更新时未指定值,则被赋值为当前时间。


网页标题:mysql怎么获取年月日,mysql 获取年月日
URL地址:http://cdxtjz.cn/article/hcpcss.html

其他资讯