扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
命令:
成都创新互联公司长期为上1000+客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为钟楼企业提供专业的成都做网站、网站设计,钟楼网站改版等技术服务。拥有10多年丰富建站经验和众多成功案例,为您定制开发。
select date_format(curdate(),'%w') from dual;
更多参考:
MySQL中DATE_FORMAT(date, format)函数可根据format字符串格式化日期或日期和时间值date,返回结果串。
也可用DATE_FORMAT( ) 来格式化DATE 或DATETIME 值,以便得到所希望的格式。根据format字符串格式化date值。
0 先理解下格式问题
要理解两种格式,一是mysql内部使用和存储时使用的格式,另一个是用户显示的格式;
存储格式:mysql保存日期时间值时使用的CCYY-MM-DD格式遵循ISO 8601标准;
显示格式:显示在输出界面上的格式,可以使用DATA_FORMAT()或TIME_FORMAT()函数来设置和转换;
1 转换和处理
1)提交数据,一是使用标准格式让其自动识别,二是对输入值进行格式指定和转换
insert into t (d) values('2012-01-01'); #使用默认ansi标准格式,让数据库自动识别字串为日期;
insert into t (d) values( STR_TO_DATE('2012/February/01', '%Y/%M/%d') ); #使用字符转换为日期的函数来处理自定义格式的输入值;
2)查询数据,一是不使用格式(即使用默认的CCYY-MM-DD格式),二是指定输出格式
select current_date(); #默认格式
select date_format(current_date(), ''%Y/%M/%d''); #使用自定义格式,具体参考下date_format的帮助,主要是格式控制符的使用。
2 格式化参数
DATE_FORMAT(), TIME_FORMAT(), STR_TO_DATE()这三个函数都接受格式化串作为参数来格式化日期时间
常用的格式化字符:
%Y 4位数字年份 2012
%y 2位数字年份 12
%M 完整英文月份名称,January - December
%b 月份名称前三个字母,Jan - Dec
%m 2位数字月份 01-12
%c 最小位数字月份 1-12
%d 2位数字日期 01-31
%e 最小位数字日期 1-31
%W 工作日名称 Sunday - Saturday
%r 12小时制时间,以AM或PM结尾
%T 24小时制时间
%H 24小时制小时 00-23
%i 2位数字分钟 00-59
%s 2位数字秒数 00-59
%% %文字字符
这里顺便说一下DAYOFWEEK的用法:DAYOFWEEK(date) (NOTE: 也可小写 dayofweek)返回date (1 = 周日, 2 = 周一, ..., 7 = 周六)对应的工作日索引。mysql SELECT DAYOFWEEK('1998-02-03'); - 3
具体思路:
1.判断字符串是否8位
2.如果是8位,通过datalength判断是否8位,如果不是8位,说明字符串中存在汉字或者不可见字符
3.通过Ascii码对8位中的每一位字符进行判断,目的是判断是否数字(按照AsciI码可以避免不可见字符)
4.如果符合上述3中条件,说明字符是8位的数字,判断是否正常日期
这里是一个使用日期函数的例子。下面的查询选择了所有记录,其date_col的值是在最后30天以内:
mysql SELECT something FROM table
WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) = 30;
DAYOFWEEK(date)
返回日期date的星期索引(1=星期天,2=星期一, ……7=星期六)。这些索引值对应于ODBC标准。
mysql select DAYOFWEEK('1998-02-03');
- 3
WEEKDAY(date)
返回date的星期索引(0=星期一,1=星期二, ……6= 星期天)。
mysql select WEEKDAY('1997-10-04 22:23:00');
- 5
mysql select WEEKDAY('1997-11-05');
- 2
DAYOFMONTH(date)
返回date的月份中日期,在1到31范围内。
mysql select DAYOFMONTH('1998-02-03');
- 3
DAYOFYEAR(date)
返回date在一年中的日数, 在1到366范围内。
mysql select DAYOFYEAR('1998-02-03');
- 34
MONTH(date)
返回date的月份,范围1到12。
mysql select MONTH('1998-02-03');
- 2
DAYNAME(date)
返回date的星期名字。
mysql select DAYNAME("1998-02-05");
- 'Thursday'
MONTHNAME(date)
返回date的月份名字。
mysql select MONTHNAME("1998-02-05");
- 'February'
QUARTER(date)
返回date一年中的季度,范围1到4。
mysql select QUARTER('98-04-01');
- 2
WEEK(date)
WEEK(date,first)
对于星期天是一周的第一天的地方,有一个单个参数,返回date的周数,范围在0到52。2个参数形式WEEK()允许
指定星期是否开始于星期天或星期一。如果第二个参数是0,星期从星期天开始,如果第二个参数是1,
从星期一开始。
mysql select WEEK('1998-02-20');
- 7
mysql select WEEK('1998-02-20',0);
- 7
mysql select WEEK('1998-02-20',1);
- 8
YEAR(date)
返回date的年份,范围在1000到9999。
mysql select YEAR('98-02-03');
- 1998
HOUR(time)
返回time的小时,范围是0到23。
mysql select HOUR('10:05:03');
- 10
MINUTE(time)
返回time的分钟,范围是0到59。
mysql select MINUTE('98-02-03 10:05:03');
- 5
SECOND(time)
回来time的秒数,范围是0到59。
mysql select SECOND('10:05:03');
- 3
PERIOD_ADD(P,N)
增加N个月到阶段P(以格式YYMM或YYYYMM)。以格式YYYYMM返回值。注意阶段参数P不是日期值。
mysql select PERIOD_ADD(9801,2);
- 199803
PERIOD_DIFF(P1,P2)
返回在时期P1和P2之间月数,P1和P2应该以格式YYMM或YYYYMM。注意,时期参数P1和P2不是日期值。
mysql select PERIOD_DIFF(9802,199703);
- 11
DATE_ADD(date,INTERVAL expr type)
DATE_SUB(date,INTERVAL expr type)
ADDDATE(date,INTERVAL expr type)
SUBDATE(date,INTERVAL expr type)
这些功能执行日期运算。对于MySQL 3.22,他们是新的。ADDDATE()和SUBDATE()是DATE_ADD()和DATE_SUB()的同义词。
MySQL数据库中year()函数是求某个特定日期中的年份,代码如下:
select
'2015-08-11'
as
date,year('2015-08-11')
as
year;
确定一个日期是一年中的第几个季度,可以用QUARTER()函数实现,代码如下:
SELECT
'2015-08-11'
AS
DATE,QUARTER('2015-08-11')
AS
QUARTER;
返回一个日期是一年中的月份,利用month()函数实现,代码如下:
SELECT
'2015-08-11'
AS
DATE,MONTH('2015-08-11')
AS
MONTH;
获取一个确定日期是一个月份中的多少号,可以用day()函数求得,具体实现代码如下:
SELECT
'2015-08-11'
AS
DATE,DAY('2015-08-11')
AS
DAY;
有时日期中带有时间,而如何获取小时数,这可以利用自带的函数hour()实现,代码如下:
SELECT
'2015-08-11
12:20:45'
AS
DATE,HOUR('2015-08-11
12:20:45')
AS
HOUR;
求取日期时间中的分钟数,可以利用MINUTE()函数实现,代码如下:
SELECT
'2015-08-11
12:20:45'
AS
DATE,MINUTE('2015-08-11
12:20:45')
AS
MINUTE;
最后,获取时间中的秒数,利用SECOND()函数实现,代码如下:
SELECT
'2015-08-11
12:20:45'
AS
DATE,SECOND('2015-08-11
12:20:45')
AS
SECOND;
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流