日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

[数据库] MySQL基础知识之日期判断及添加排序序号

發布時間:2024/5/28 数据库 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [数据库] MySQL基础知识之日期判断及添加排序序号 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這篇文章主要記錄MySQL中遇到的幾個基礎問題,希望文章對你有所幫助!包括:
? ? ? ? 1.日期類型的判斷
? ? ? ? 2.decode函數的替代方法
? ? ? ? 3.查詢語句中添加一個排序的序號
? ? ? ? 4.子函數查詢select a.*


1.日期類型判斷

日期類型主要是:DATE(顯示格式:YYYY-MM-DD)
? ? ? ? ? ? ? ? ? ? ? ? ? ?DATETTIME(顯示格式:YYYY-MM-DD HH:MM:SS)
假設存在學生表Student,如下圖所示:




(1)如何判斷日期的年月日
判斷日:date_format(birthday,'%Y-%m-%d')='2016-08-23'
判斷月:date_format(birthday,'%Y-%m')='2016-08'
判斷年:date_format(birthday,'%Y')='2016'

對應的SQL語句如下:

select * from student where date_format(birthday,'%Y-%m-%d')='2016-08-23'; 王二 111111 1 2016-08-23 21:05:46.000000 94 85select * from student where date_format(birthday,'%Y-%m')='2016-08'; 王二 111111 1 2016-08-23 21:05:46.000000 94 85 楊三 123456 3 2016-08-17 21:06:28.000000 89 75 劉五 000000 4 2016-08-18 21:07:02.000000 61 92select * from student where date_format(birthday,'%Y')='2016'; 王二 111111 1 2016-08-23 21:05:46.000000 94 85 李四 123456 2 2016-07-23 21:06:15.000000 76 87 楊三 123456 3 2016-08-17 21:06:28.000000 89 75 劉五 000000 4 2016-08-18 21:07:02.000000 61 92

(2)如何判斷時間范圍,如在2016-08-17到2016-08-20之間的數據
通常會使用between and來進行比較

select * from student where date_format(birthday,'%Y-%m-%d') between '2016-08-17' and '2016-08-20'; 如下圖所示:

(3)獲取日期的年月日,使用YEAR()、month()、day()函數

select username, stuid, YEAR(birthday), month(birthday), day(birthday) from student; 輸出如下圖所示:


2.decode取代函數

在Oracle中存在decode(b,0,0,a/b)函數,用于防止分母為0,如果b為0返回0,否則返回a/b。但是MySQL中沒有該函數,需要通過CASE WHEN進行替換。
替代代碼:case b when 0 then 0 else a/b end
具體含義:當b為0時返回0,否則返回a/b并結束
假設存在一個黃六,英語成績為0,需要統計"數學/英語"的結果: ?

select username, stuid, math, english, math/english from student; 此時黃六輸出NULL空值,如下圖所示:

而使用了case判斷后:
select username, stuid, math, english, case english when 0 then 0 else math/english end as cf from student; 輸出如下圖所示,同時可以輸出自定義的值,如'分母為0'等。


3.添加排序序號

通常MySQL排序使用order by(從小到大),然后增加desc是從大到小排序。

select username, stuid, math, english from student order by math; select username, stuid, math, english from student order by math desc; 輸出如下圖所示:

?? 但是如果需要增加一個序號,自定義的排名呢?
假設前段顯示需要序號,通常是通過Java設置一個Num來加1顯示,但是數據庫如何實現呢?
通過:select @rownum:=@rownum+1 as num, name from table,?
? ? ? ? ? (select @rownum:=0) temp;?

輸出如下圖所示,注意這是自定義一列,而不是表中某個字段屬性。
select @rownum:=@rownum+1 as num, username, stuid, math, english from student,(select @rownum:=0) B order by math;


另一種方法:
set @i:= 0; select @i:= @i + 1 as `order`, a.* from a order by col desc;

同時,你可能會遇到一個問題,如下面的SQL語句:

select @rownum:=@rownum+1 as num, A.UnitDepName, sum(CostSum), A.UnitArea, (case A.UnitArea when 0 then 0 else sum(CostSum)/(A.UnitArea) end) as avCostSum from all_unitdepinfo A, gc_nhfxxdwzxfhzmon T, (select @rownum:=0) B where (A.UnitCode=T.UnitCode and A.UnitDepCode=T.UnitDepCode) and (A.UnitCode='GC001') group by A.UnitDepCode order by sum(CostSum)/sum(A.UnitArea) desc; 它的功能是統計各個學院能耗,并且排名、添加相應的序號,但輸出的結果如下:
存在的問題是自定義序號應該是從1到n,而它序列弄錯了。怎么解決呢?
采用子查詢進行修改,即:
select @rownum:=@rownum+1 as num, D.* from ?(....) D,(select @rownum:=0) B;

select @rownum:=@rownum+1 as num, D.* from (select A.UnitDepName, sum(CostSum), sum(A.UnitArea), (case A.UnitArea when 0 then 0 else sum(CostSum)/sum(A.UnitArea) end) as avCostSum from all_unitdepinfo A, gc_nhfxxdwzxfhzmon T where (A.UnitCode=T.UnitCode and A.UnitDepCode=T.UnitDepCode) and (A.UnitCode='GC001') group by A.UnitDepCode order by sum(CostSum)/sum(A.UnitArea) desc) D, (select @rownum:=0) B; 輸出結果如下圖所示,即可:
注意:只有當你在實際操作數據庫過程中遇到了該問題,才知道這篇文章的好處!



4.子函數select a.*查詢

如果需要連接兩個查詢,并通過子查詢實現,如果每個值能一一對應上,建議使用select a.*

SELECT a.*, b.* FROM (SELECT SUM(DOMESTIC_TRAIN) + SUM(OVERSEA_TRAIN_TOTAL) AS zj, SUM(DEGREE_PHD) AS qzgdbsx, SUM(DOMESTIC_TRAIN) AS jnjxrcs, SUM(OVERSEA_TRAIN_TOTAL) AS jwjxrcs FROM TRAIN_INTERFLOW where YEAR_START=to_char(sysdate,'yyyy')-2 ) a, (SELECT SUM(PARTICIPANT_NUMBER) AS cyjglxkrcs FROM EDU_REVOLUTION where YEAR_START=to_char(sysdate,'yyyy')-2 ) b; 通常用于統計總數,不同總數進行總和,返回一條數據的情況。
其中表對應各學院的信息,但希望你能學習這種SQL語句的格式。
輸出如下圖所示:


字符串拼接輸出用法如下,輸出"1-8"時間段:
concat(TimeStart,'-',TimeEnd)

最后希望文章對你有所幫組,主要是記錄實際遇到的幾個問題,如果文章中存在不足之處,還請海涵~數據庫SQL語句確實只有當你真正遇到相關問題時,才會覺得相關解決方法有用。
同時后面的文章會講解如何使用Navicat for MySQL講解設置主鍵、外鍵、遞增序列等。
(By:Eastmount 2016-08-23 深夜3點 ??
http://blog.csdn.net//eastmount/?)


總結

以上是生活随笔為你收集整理的[数据库] MySQL基础知识之日期判断及添加排序序号的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。