日蛇时间,日期操作小记

本文转自:

今天帮同事处理一个SQL(简化过后的)执行报错:

在时间比较查询的时候,int的效率明显更高。祥文见//www.jb51.net/article/29767.htm
但是在做项目的时候或者直接在数据库查看数据的时候,明显这个int一看头就大,比如我们想
要查看一个用户的注册时间:
select reg_time from t_xx_users where user_id=1;
这时候返回是个int值,不能直观的看到具体的时间,所以这时候就涉及到datetime和int的转化问题,
还有php的date和time也是要涉及到相应的转化。本文略总结一下:
(1)php
int值:
time():是返回自从 Unix 纪元(格林威治时间 1970 年 1 月 1 日
00:00:00)到当前时间的秒数。
我们想要获得1970 年 1 月 1 日到
2012-2-10的秒数可以通过strtotime()来实现:即:strtotime(‘2012-2-10’);
date值:
string date ( string format [, int timestamp] )
比如:直接date()返回的的实现当前的时间,当然我们可以指定的他的格式:例如date(‘Y-m-d’,strtotime(‘2012-2-10’));
时间操作:
date(‘Y-m-d h:i:s’,strtotime(‘+1 week’));
date(‘Y-m-d h:i:s’,strtotime(‘+5 hours’));
date(‘Y-m-d h:i:s’,strtotime(‘next Monday));
date(‘Y-m-d h:i:s’,strtotime(‘last Sunday’));
date(‘Y-m-d h:i:s’,strtotime(‘+ 1 day’,12313223));!!详见 int strtotime (
string time [, int now] )

DATE_FORMAT(date,format)

复制代码 代码如下:

(2)mysql:
int->datetime
select from_unixtime(int_time) from table;
datetime->int;
select unix_timestamp(date_time) from table;
时间操作:
select dayofweek(‘2012-2-2’);返回一个星期的第几天
select dayofmonth(‘2012-2-2’);返回一月中的第几天
select dayofyear(‘2012-2-2’);返回一年中的第几天
类似函数: month() day() hour() week()……
+几天 date_add(date,interval 2 days);
-几天 date_sub(date,interval 2 days);
时间格式:
date_format(date,format)
select DATE_FORMAT(‘1997-10-04 22:23:00′,’%W %M %Y’);
其他函数:TIME_TO_SEC() SEC_TO_TIME()…

Formats the date value according to the format string.

mysql> select date_format(‘2013-11-19′,’Y-m-d’) >
timediff(‘2013-11-19’,
‘2013-11-20’);                                        

您可能感兴趣的文章:

  • MySQL中日期比较时遇到的编码问题解决办法
  • PHP以及MYSQL日期比较方法
  • mysql
    获取当前日期函数及时间格式化参数详解
  • MySql用DATE_FORMAT截取DateTime字段的日期值
  • mysql
    unix准换时间格式查找指定日期数据代码
  • MySql日期查询语句详解
  • 深入mysql YEAR() MONTH()
    DAYOFMONTH()日期函数的详解
  • mysql
    查询指定日期时间内sql语句实现原理与代码
  • PHP+Mysql日期时间如何转换(UNIX时间戳和格式化日期)
  • MySQL 日期时间函数常用总结
  • MySQL
    获得当前日期时间的函数小结
  • mysql中取系统当前时间,当前日期方便查询判定的代码
  • Mysql 日期时间
    DATE_FORMAT(date,format)
  • Mysql中日期和时间函数应用不用求人
  • mysql的日期和时间函数
  • MySQL日期数据类型、时间类型使用总结
  • MySQL的Data_ADD函数与日期格式化函数说明
  • mysql中常用日期比较与计算函数

网赌十大信誉的平台,The following specifiers may be used in the format string. As of
MySQL 3.23, the “%” character is required
before format specifier characters. In earlier versions of MySQL, “%” was optional.

ERROR 1267 (HY000): Illegal mix of collations
(utf8_general_ci,COERCIBLE) and (latin1_swedish_ci,NUMERIC) for
operation ‘>’

Specifier Description
%a Abbreviated weekday name (Sun..Sat)
%b Abbreviated month name (Jan..Dec)
%c Month, numeric (0..12)
%D Day of the month with English suffix (0th, 1st, 2nd, 3rd, …)
%d Day of the month, numeric (00..31)
%e Day of the month, numeric (0..31)
%f Microseconds (000000..999999)
%H Hour (00..23)
%h Hour (01..12)
%I Hour (01..12)
%i Minutes, numeric (00..59)
%j Day of year (001..366)
%k Hour (0..23)
%l Hour (1..12)
%M Month name (January..December)
%m Month, numeric (00..12)
%p AM or PM
%r Time, 12-hour (hh:mm:ss followed by AM or PM)
%S Seconds (00..59)
%s Seconds (00..59)
%T Time, 24-hour (hh:mm:ss)
%U Week (00..53), where Sunday is the first day of the week
%u Week (00..53), where Monday is the first day of the week
%V Week (01..53), where Sunday is the first day of the week; used with %X
%v Week (01..53), where Monday is the first day of the week; used with %x
%W Weekday name (Sunday..Saturday)
%w Day of the week (0=Sunday..6=Saturday)
%X Year for the week where Sunday is the first day of the week, numeric, four digits; used with %V
%x Year for the week, where Monday is the first day of the week, numeric, four digits; used with %v
%Y Year, numeric, four digits
%y Year, numeric (two digits)
%% A literal “%” character
%x x, for any “x” not listed above

乍一看挺莫名其妙的,查了下手册,发现有这么一段:

The %v, %V, %x, and %X format specifiers are available as of
MySQL 3.23.8. %f is available as of MySQL 4.1.1.

复制代码 代码如下:

Ranges for the month and day specifiers begin with zero due to the fact
that MySQL permits the storing of incomplete dates such as
'2014-00-00' (as of MySQL 3.23).

The language used for day and month names and abbreviations is
controlled by the value of the lc_time_names system variable (Section
9.7, “MySQL Server Locale Support”).

As of MySQL 4.1.21, the language used for day and month names and
abbreviations is controlled by the value of the lc_time_names system
variable (Section 9.8, “MySQL Server Locale Support”).

The DATE_FORMAT() returns a string with a character set and collation
given by character_set_connection and collation_connection so that it
can return month and weekday names containing non-ASCII characters.

As of MySQL 4.1.23, DATE_FORMAT() returns a string with a character
set and collation given by character_set_connection and
collation_connection so that it can return month and weekday names
containing non-ASCII characters. Before 4.1.23, the return value is a
binary string.

也就是说,DATE_FORMATE() 函数返回的结果是带有字符集/校验集属性的,而
TIMEDIFF() 函数则没有字符集/校验集属性,我们来验证一下:

mysql> SELECT DATE_FORMAT('2009-10-04 22:23:00', '%W %M %Y');
    -> 'Sunday October 2009'
mysql> SELECT DATE_FORMAT('2007-10-04 22:23:00', '%H:%i:%s');
    -> '22:23:00'
mysql> SELECT DATE_FORMAT('1900-10-04 22:23:00',
  ->         '%D %y %a %d %m %b %j');
    -> '4th 00 Thu 04 10 Oct 277'
mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00',
  ->         '%H %k %I %r %T %S %w');
    -> '22 22 10 10:23:00 PM 22:23:00 00 6'
mysql> SELECT DATE_FORMAT('1999-01-01', '%X %V');
    -> '1998 52'
mysql> SELECT DATE_FORMAT('2006-06-00', '%d');
    -> '00'

复制代码 代码如下:

您可能感兴趣的文章:

  • MySQL中日期比较时遇到的编码问题解决办法
  • PHP以及MYSQL日期比较方法
  • mysql
    获取当前日期函数及时间格式化参数详解
  • MySql用DATE_FORMAT截取DateTime字段的日期值
  • mysql
    unix准换时间格式查找指定日期数据代码
  • MySql日期查询语句详解
  • 深入mysql YEAR() MONTH()
    DAYOFMONTH()日期函数的详解
  • mysql
    查询指定日期时间内sql语句实现原理与代码
  • PHP+Mysql日期时间如何转换(UNIX时间戳和格式化日期)
  • MySQL 日期时间函数常用总结
  • php&mysql 日期操作小记
  • MySQL
    获得当前日期时间的函数小结
  • mysql中取系统当前时间,当前日期方便查询判定的代码
  • Mysql中日期和时间函数应用不用求人
  • mysql的日期和时间函数
  • MySQL日期数据类型、时间类型使用总结
  • MySQL的Data_ADD函数与日期格式化函数说明
  • mysql中常用日期比较与计算函数

mysql> set names utf8;
mysql> select charset(date_format(‘2013-11-19′,’Y-m-d’)),
charset(timediff(‘2013-11-19’, ‘2013-11-20’));
+——————————————–+———————————————–+
| charset(date_format(‘2013-11-19′,’Y-m-d’)) |
charset(timediff(‘2013-11-19’, ‘2013-11-20’)) |
+——————————————–+———————————————–+
| utf8                                       |
binary                                        |
+——————————————–+———————————————–+

mysql> set names gb2312;
mysql> select charset(date_format(‘2013-11-19′,’Y-m-d’)),
charset(timediff(‘2013-11-19’, ‘2013-11-20’));
+——————————————–+———————————————–+
| charset(date_format(‘2013-11-19′,’Y-m-d’)) |
charset(timediff(‘2013-11-19’, ‘2013-11-20’)) |
+——————————————–+———————————————–+
| gb2312                                     |
binary                                        |
+——————————————–+———————————————–+

可以看到,随着通过 SET NAMES 修改
character_set_connection、collation_connection  值,DATE_FORMAT()
函数返回结果的字符集也跟着不一样。在这种情况下,想要正常工作,就需要将结果进行一次字符集转换,例如:

复制代码 代码如下:

mysql> select date_format(‘2013-11-19′,’Y-m-d’) >
convert(timediff(‘2013-11-19’, ‘2013-11-20’) using utf8);
+———————————————————————————————-+
| date_format(‘2013-11-19′,’Y-m-d’) > convert(timediff(‘2013-11-19’,
‘2013-11-20’) using utf8) |
+———————————————————————————————-+
|                                                                                           
1 |
+———————————————————————————————-+

就可以了

P.S,MySQL的版本:5.5.20-55-log Percona Server (GPL), Release rel24.1,
Revision 217

您可能感兴趣的文章:

  • PHP以及MYSQL日期比较方法
  • mysql
    获取当前日期函数及时间格式化参数详解
  • MySql用DATE_FORMAT截取DateTime字段的日期值
  • mysql
    unix准换时间格式查找指定日期数据代码
  • MySql日期查询语句详解
  • 深入mysql YEAR() MONTH()
    DAYOFMONTH()日期函数的详解
  • mysql
    查询指定日期时间内sql语句实现原理与代码
  • PHP+Mysql日期时间如何转换(UNIX时间戳和格式化日期)
  • MySQL 日期时间函数常用总结
  • php&mysql 日期操作小记
  • MySQL
    获得当前日期时间的函数小结
  • mysql中取系统当前时间,当前日期方便查询判定的代码
  • Mysql 日期时间
    DATE_FORMAT(date,format)
  • Mysql中日期和时间函数应用不用求人
  • mysql的日期和时间函数
  • MySQL日期数据类型、时间类型使用总结
  • MySQL的Data_ADD函数与日期格式化函数说明
  • mysql中常用日期比较与计算函数

Post Author: admin

发表评论

电子邮件地址不会被公开。 必填项已用*标注