例子:
創(chuàng)新互聯(lián)公司于2013年開(kāi)始,先為延安等服務(wù)建站,延安等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為延安企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
where year(COL)*100 + month(COL) between 201812 and 201903
懂了就不看下面的廢話:year*100+month把日期類型的COL字段轉(zhuǎn)換為yyyymm的6位整數(shù),然后使用BETWEEN來(lái)篩選。
這樣的方法好寫(xiě),但是效率不高,無(wú)法使用索引。如果要使用日期字段的索引,必須在客戶端計(jì)算出起止日期,然后再BETWEEN兩個(gè)日期之間,開(kāi)始日期就是yyyymm01、結(jié)束日期是yyyy(mm+1)01-1
select * from 表 where date_format(日期,'%Y-%m-%d')='2014-04-01' 日期
select * from 表 where date_format(日期,'%Y-%m')='2014-04' 月份
select * from 表 where date_format(日期,'%Y')='2014' 年
就是date_format(日期,'%Y-%m-%d') 這里的參數(shù)長(zhǎng)短
1、查詢確定年月的數(shù)據(jù),使用to_date或to_char都可以實(shí)現(xiàn) SELECT * FROM 表名 WHERE TO_CHAR(日期列,'YYYY-MM') = TO_CHAR('2013-06','YYYY-MM') 或者 SELECT * FROM 表名 WHERE 日期列 = TO_Date('2013-06','YYYY-MM')
select year(curdate()),month(curdate()),day(curdate());
select weekofyear(curdate());
有點(diǎn)細(xì)微的差別,weekofyear(date)相當(dāng)于week(date,3).
下面是week(date,Mode),取值的說(shuō)明,根據(jù)自己的實(shí)際情況取自己想要的值
Mode 工作日 范圍 Week 1 為第一周 ...
0 周日 0-53 本年度中有一個(gè)周日
1 周一 0-53 本年度中有3天以上
2 周日 1-53 本年度中有一個(gè)周日
3 周一 1-53 本年度中有3天以上
4 周日 0-53 本年度中有3天以上
5 周一 0-53 本年度中有一個(gè)周一
6 周日 1-53 本年度中有3天以上
7 周一 1-53 本年度中有一個(gè)周一
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)
提取一個(gè)時(shí)間或日期時(shí)間表達(dá)式的時(shí)間部分,并將其以字符串形式返回。
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() 返回起始時(shí)間 expr 和結(jié)束時(shí)間expr2 之間的時(shí)間。 expr 和expr2 為時(shí)間或 date-and-time 表達(dá)式,兩個(gè)的類型必須一樣。
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)
對(duì)于一個(gè)單參數(shù),該函數(shù)將日期或日期時(shí)間表達(dá)式 expr 作為日期時(shí)間值返回.對(duì)于兩個(gè)參數(shù), 它將時(shí)間表達(dá)式 expr2 添加到日期或日期時(shí)間表達(dá)式 expr 中,將theresult作為日期時(shí)間值返回。
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)
將整型表達(dá)式int_expr 添加到日期或日期時(shí)間表達(dá)式 datetime_expr中。 int_expr 的單位被時(shí)間間隔參數(shù)給定,該參數(shù)必須是以下值的其中一個(gè): FRAC_SECOND、SECOND、 MINUTE、 HOUR、 DAY、 WEEK、 MONTH、 QUARTER或 YEAR。
可使用所顯示的關(guān)鍵詞指定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)
返回日期或日期時(shí)間表達(dá)式datetime_expr1 和datetime_expr2the 之間的整數(shù)差。其結(jié)果的單位由interval 參數(shù)給出。interval 的法定值同TIMESTAMPADD()函數(shù)說(shuō)明中所列出的相同。
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()函數(shù)相同, 然而format 字符串可能僅會(huì)包含處理小時(shí)、分鐘和秒的格式說(shuō)明符。其它說(shuō)明符產(chǎn)生一個(gè)NULL值或0。
若time value包含一個(gè)大于23的小時(shí)部分,則 %H 和 %k 小時(shí)格式說(shuō)明符會(huì)產(chǎn)生一個(gè)大于0..23的通常范圍的值。另一個(gè)小時(shí)格式說(shuō)明符產(chǎn)生小時(shí)值模數(shù)12。
mysql SELECT TIME_FORMAT('100:00:00', '%H %k %h %I %l');
- '100 100 04 04 4'
◆ TIME_TO_SEC(time)
返回已轉(zhuǎn)化為秒的time參數(shù)。
mysql SELECT TIME_TO_SEC('22:23:00');
- 80580
mysql SELECT TIME_TO_SEC('00:39:38');
- 2378
◆ TO_DAYS(date)
給定一個(gè)日期date, 返回一個(gè)天數(shù) (從年份0開(kāi)始的天數(shù) )。
mysql SELECT TO_DAYS(950501);
- 728779
mysql SELECT TO_DAYS('1997-10-07');
- 729669
TO_DAYS() 不用于陽(yáng)歷出現(xiàn)(1582)前的值,原因是當(dāng)日歷改變時(shí),遺失的日期不會(huì)被考慮在內(nèi)。
請(qǐng)記住, MySQL使用“日期和時(shí)間類型”中的規(guī)則將日期中的二位數(shù)年份值轉(zhuǎn)化為四位。例如, '1997-10-07'和 '97-10-07' 被視為同樣的日期:
mysql SELECT TO_DAYS('1997-10-07'), TO_DAYS('97-10-07');
- 729669, 729669
對(duì)于1582 年之前的日期(或許在其它地區(qū)為下一年 ), 該函數(shù)的結(jié)果實(shí)不可靠的。
◆ UNIX_TIMESTAMP(), UNIX_TIMESTAMP(date)
若無(wú)參數(shù)調(diào)用,則返回一個(gè)Unix timestamp ('1970-01-01 00:00:00' GMT 之后的秒數(shù)) 作為無(wú)符號(hào)整數(shù)。若用date 來(lái)調(diào)用UNIX_TIMESTAMP(),它會(huì)將參數(shù)值以'1970-01-01 00:00:00' GMT后的秒數(shù)的形式返回。date 可以是一個(gè)DATE 字符串、一個(gè) DATETIME字符串、一個(gè) TIMESTAMP或一個(gè)當(dāng)?shù)貢r(shí)間的YYMMDD 或YYYMMDD格式的數(shù)字。
mysql SELECT UNIX_TIMESTAMP();
- 882226357
mysql SELECT UNIX_TIMESTAMP('1997-10-04 22:23:00');
- 875996580
當(dāng) UNIX_TIMESTAMP被用在 TIMESTAMP列時(shí), 函數(shù)直接返回內(nèi)部時(shí)戳值, 而不進(jìn)行任何隱含的 “string-to-Unix-timestamp”轉(zhuǎn)化。假如你向UNIX_TIMESTAMP()傳遞一個(gè)溢出日期,它會(huì)返回 0,但請(qǐng)注意只有基本范圍檢查會(huì)被履行 (年份從1970 到 2037, 月份從01到12,日期從 01 到31)。
假如你想要減去 UNIX_TIMESTAMP() 列, 你或許希望刪去帶符號(hào)整數(shù)的結(jié)果。
◆ UTC_DATE, UTC_DATE()
返回當(dāng)前 UTC日期值,其格式為 'YYYY-MM-DD' 或 YYYYMMDD,具體格式取決于函數(shù)是否用在字符串或數(shù)字語(yǔ)境中。
mysql SELECT UTC_DATE(), UTC_DATE() + 0;
- '2003-08-14', 20030814
◆ UTC_TIME, UTC_TIME()
返回當(dāng)前 UTC 值,其格式為 'HH:MM:SS' 或HHMMSS,具體格式根據(jù)該函數(shù)是否用在字符串或數(shù)字語(yǔ)境而定。
mysql SELECT UTC_TIME(), UTC_TIME() + 0;
- '18:07:53', 180753
◆ UTC_TIMESTAMP, UTC_TIMESTAMP()
返回當(dāng)前UTC日期及時(shí)間值,格式為 'YYYY-MM-DD HH:MM:SS' 或YYYYMMDDHHMMSS,具體格式根據(jù)該函數(shù)是否用在字符串或數(shù)字語(yǔ)境而定。
mysql SELECT UTC_TIMESTAMP(), UTC_TIMESTAMP() + 0;
- '2003-08-14 18:08:04', 20030814180804
◆ WEEK(date[,mode])
該函數(shù)返回date 對(duì)應(yīng)的星期數(shù)。WEEK() 的雙參數(shù)形式允許你指定該星期是否起始于周日或周一, 以及返回值的范圍是否為從0 到53 或從1 到53。若 mode參數(shù)被省略,則使用default_week_format系統(tǒng)自變量的值。請(qǐng)參見(jiàn)5.3.3節(jié),“服務(wù)器系統(tǒng)變量”。
以下表說(shuō)明了mode 參數(shù)的工作過(guò)程:
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
注意,假如有一個(gè)日期位于前一年的最后一周, 若你不使用2、3、6或7作為mode 參數(shù)選擇,則MySQL返回 0:
mysql SELECT YEAR('2000-01-01'), WEEK('2000-01-01',0);
- 2000, 0
有人或許會(huì)提出意見(jiàn),認(rèn)為 MySQL 對(duì)于WEEK() 函數(shù)應(yīng)該返回 52 ,原因是給定的日期實(shí)際上發(fā)生在1999年的第52周。我們決定返回0作為代替的原因是我們希望該函數(shù)能返回“給定年份的星期數(shù)”。這使得WEEK() 函數(shù)在同其它從日期中抽取日期部分的函數(shù)結(jié)合時(shí)的使用更加可靠。
假如你更希望所計(jì)算的關(guān)于年份的結(jié)果包括給定日期所在周的第一天,則應(yīng)使用 0、2、5或 7 作為mode參數(shù)選擇。
mysql SELECT WEEK('2000-01-01',2);
- 52
作為選擇,可使用 YEARWEEK()函數(shù):
mysql SELECT YEARWEEK('2000-01-01');
- 199952
mysql SELECT MID(YEARWEEK('2000-01-01'),5,2);
- '52'
◆ WEEKDAY(date)
返回date (0 = 周一, 1 = 周二, ... 6 = 周日)對(duì)應(yīng)的工作日索引 weekday index for
mysql SELECT WEEKDAY('1998-02-03 22:23:00');
- 1
mysql SELECT WEEKDAY('1997-11-05');
- 2
◆ WEEKOFYEAR(date)
將該日期的陽(yáng)歷周以數(shù)字形式返回,范圍是從1到53。它是一個(gè)兼容度函數(shù),相當(dāng)于WEEK(date,3)。
mysql SELECT WEEKOFYEAR('1998-02-20');
- 8
◆ YEAR(date)
返回date 對(duì)應(yīng)的年份,范圍是從1000到9999。
mysql SELECT YEAR('98-02-03');
- 1998
◆ YEARWEEK(date), YEARWEEK(date,start)
返回一個(gè)日期對(duì)應(yīng)的年或周。start參數(shù)的工作同 start參數(shù)對(duì) WEEK()的工作相同。結(jié)果中的年份可以和該年的第一周和最后一周對(duì)應(yīng)的日期參數(shù)有所不同。
mysql SELECT YEARWEEK('1987-01-01');
- 198653
注意,周數(shù)和WEEK()函數(shù)隊(duì)可選參數(shù)0或 1可能會(huì)返回的(0) w有所不同,原因是此時(shí) WEEK() 返回給定年份的語(yǔ)境中的周。
sql按日期中的月份查詢?nèi)缦拢?/p>
SQL Server
select * from [data] where? DATEPART(m,[date])=2
Access
select * from [data] where? DATEPART('m',[date])=2
說(shuō)明:
DATEPART(datepart,date)
返回表示指定日期的指定部分的整數(shù)
datepart 要取得的日期部分
- m 表示月份,d表示日,yyyy表示年
date 日期表達(dá)式
舉例:
--以2013-12-10 12:56:55為例
--convert(nvarchar(10),CreateDate,120)? ? ? =? ? ? 2013-12-10
--DATEPART(month,CreateDate)? ? ? =? ? ? 12
--DATEPART(year,CreateDate)? ? ? =? ? ? 2013
--月
select datepart(MONTH,'2013-06-08')
select datepart(mm,'2013-06-08')
select datepart(m,'2013-06-08')
擴(kuò)展資料:
相關(guān)函數(shù)
SQL Aggregate 函數(shù)
SQL Aggregate 函數(shù)計(jì)算從列中取得的值,返回一個(gè)單一的值。
有用的 Aggregate 函數(shù):
AVG() - 返回平均值
COUNT() - 返回行數(shù)
FIRST() - 返回第一個(gè)記錄的值
LAST() - 返回最后一個(gè)記錄的值
MAX() - 返回最大值
MIN() - 返回最小值
SUM() - 返回總和
SQL Scalar 函數(shù)
SQL Scalar 函數(shù)基于輸入值,返回一個(gè)單一的值。
有用的 Scalar 函數(shù):
UCASE() - 將某個(gè)字段轉(zhuǎn)換為大寫(xiě)
LCASE() - 將某個(gè)字段轉(zhuǎn)換為小寫(xiě)
MID() - 從某個(gè)文本字段提取字符
LEN() - 返回某個(gè)文本字段的長(zhǎng)度
ROUND() - 對(duì)某個(gè)數(shù)值字段進(jìn)行指定小數(shù)位數(shù)的四舍五入
NOW() - 返回當(dāng)前的系統(tǒng)日期和時(shí)間
下面以比較流行的mysql圖形化管理工具Navicat為例,其他工具或者在命令行中以及編程語(yǔ)言中操作時(shí)的執(zhí)行的sql語(yǔ)句是一樣的。
1、假設(shè)在數(shù)據(jù)庫(kù)中有一個(gè)名為testtest的表格,表格內(nèi)容如下圖所示,表中有三條記錄是9月份的
2、打開(kāi)一個(gè)查詢窗口,輸入查詢語(yǔ)句select * from?testtest?where month(date)='9';,該語(yǔ)句表示查詢testtest表格中9月份的記錄
3、點(diǎn)擊“運(yùn)行”執(zhí)行該sql語(yǔ)句,在下方可以看到已經(jīng)查詢到了9月份的三條記錄
4、如需按年查詢可輸入select * from?testtest where year(date)='2017';,2017代表需要查詢的年份。如下圖所示只查詢到了一條記錄是2017年的