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

歡迎訪問 生活随笔!

生活随笔

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

数据库

mysql now str,数据库学习之MySQL (十)—— 日期和时间函数 NOW STR_TO_DATE DATE_FORMAT 流程控制函数 IF IFNULL CASE...

發(fā)布時間:2024/10/14 数据库 73 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql now str,数据库学习之MySQL (十)—— 日期和时间函数 NOW STR_TO_DATE DATE_FORMAT 流程控制函数 IF IFNULL CASE... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

MySQL學習專欄 正在持續(xù)更新中:)

文章目錄

日期和時間函數(shù) NOW STR_TO_DATE DATE_FORMAT

流程控制函數(shù) IF IFNULL CASE

下章預告

日期和時間函數(shù) NOW STR_TO_DATE DATE_FORMAT

函數(shù)很多 不過都有規(guī)律可記,也不難

名稱

英文

中文

返回值

NOW(x)

now

現(xiàn)在(時間)

時間日期一起

CURDATE()

current date

當前日期

當前具體日期

CURTIME()

current time

當前時間

當前具體時間

還有一些具體從一串日期中具體提取的函數(shù),函數(shù)名都是簡單的英語:

YEAR(date)

MONTH(date)

DAY(date)

HOUR(time)

MINUTE(time)

SECOND(time)

形式上,date 是2020-1-5 time是23:34:22,注意是形式。下面是實驗結果。

在上面六個函數(shù)后面加個NAME,就可以獲得名字。

很明顯,如果給的參數(shù)缺了(HOUR需要時間 卻只給了日期),也不會返回NULL,應該是未給參數(shù)都默認補全為0了。

STR_TO_DATE: str to date 字符串轉日期(格式),他需要提供解析格式,再輸出正常日期的格式,我們看下面例子:

SELECT STR_TO_DATE('1-5-2019','%m-%d-%y'); 這個類似正則匹配,

SELECT STR_TO_DATE('1, 5, 2019','%m, %d, %y');

DATE_FORMAT date-format 將日期格式化成你想要的樣子。

下面是格式符號的列表,不常用的都刪掉了:

名稱

用法

舉例

%Y

四位數(shù)的年

2020

%y

兩位數(shù)的年

20 (2020)

%m

01~12

%M

英語形式 eg.January

%d

01~31

-

-

-

%H

24小時制小時

00~24

%h

12小時制小時

00~12

%i

分鐘

00~59

%S

一分鐘鐘的第幾秒

00~59

流程控制函數(shù) IF IFNULL CASE

IF 函數(shù)和IFNULL 類似三目運算符,達到條件 返回啥,不達到條件又返回啥。注意IF()可以看做一個表達式。

SELECT

`last_name`,

IF(

`commission_pct`,

'有獎金',

'沒獎金'

) AS 獎金結果

FROM

employees ;

對IF而言 所謂條件就是 是否為真

對IFNULL而言 條件就是 是否為NULL。

案例 老員工回饋問題 在employees中,獲得所有人的基本工資,入職時間,獎金率,資歷。認為入職時間在04年以前的,資歷是老員工,記為1,04以后為新員工,記為0。另外,不允許表格中出現(xiàn)NULL,排序按獎金率降序排列。

SELECT

`salary` 基本工資,

IFNULL(`commission_pct`, 0) 獎金率,

IFNULL(`hiredate`, 0) 入職時間,

IF(YEAR(`hiredate`)<2004, 1, 0) 資歷

FROM employees

ORDER BY 獎金率 DESC;

IFNULL就是為了避免NULL的出現(xiàn)導致計算錯誤,而IF用于判斷年份資歷。

CASE

》第一種方式

CASE可以作為一個表達式語句,就和IF() IFNULL()一樣的,作為SELECT的組成部分打印出來。嘗試下面的案例, 也就是上面案例改造了一下:

USE data1;

SELECT

`salary` 基本工資,

IFNULL(`commission_pct`, 0) 獎金率,

IFNULL(`hiredate`, 0) 入職時間,

IF(YEAR(`hiredate`)<2004, 1, 0) 資歷,

CASE IFNULL(`commission_pct`, 0)

WHEN 0.40 THEN salary*(1+0.6)

WHEN 0.35 THEN salary*(1+0.4)

WHEN 0.30 THEN salary*(1+0.2)

ELSE salary*(1+0.0)

END AS 第二種工資算法結果

FROM employees

ORDER BY 獎金率 DESC;

藍框起來就作為一個語句使用,你可以給個別名“第二種工資算法結果”

結果大概這個樣子:

那問題來了,如果我希望是一個區(qū)間判斷呢?比如,入職時間在2000~2004年的員工獎金加成為0.6,明顯上面的方式只能判斷時間=2000 也即是一個定值。

》第二種方式

案例 老員工回饋問題:比起之前以2004年,一刀切認為老員工還是新員工,這里我們細分一下(類似采樣頻率提高 量化精度提升),在96年以前老員工回饋加成為0.6,97~02年回饋加成為0.4, etc

根據(jù)公式:salary*(1+commission_pct+回饋加成) = 最終工資

計算所有人的最終工資,降序排列輸出。

欄目:名字 入職時間 獎金率 最終工資

最終效果如圖:

USE data1;

SELECT

CONCAT(`last_name`,'-',`first_name`) 名字,

`salary` 基本工資,

IFNULL(`commission_pct`, 0) 獎金率,

IFNULL(`hiredate`, 0) 入職時間,

CASE

WHEN YEAR(`hiredate`) < 1996

THEN `salary` * (1+0.6+IFNULL(`commission_pct`, 0))

WHEN YEAR(`hiredate`) BETWEEN 1997 AND 2000

THEN `salary` * (1+0.4+IFNULL(`commission_pct`, 0))

WHEN YEAR(`hiredate`) BETWEEN 2001 AND 2010

THEN `salary` * (1+0.2+IFNULL(`commission_pct`, 0))

WHEN YEAR(`hiredate`) BETWEEN 2011 AND 2014

THEN `salary` * (1+0.1+IFNULL(`commission_pct`, 0))

ELSE `salary` * (1+0.0+IFNULL(`commission_pct`, 0))

END AS 最終工資

FROM

employees

ORDER BY 最終工資 DESC ;

下章預告

目前我們學習了幾種所謂單行函數(shù):

數(shù)學函數(shù)

字符串處理函數(shù)

時間日期函數(shù)

流程控制函數(shù),

說白了,算一個值出一個結果的就是單行函數(shù),

然而數(shù)據(jù)庫的重點在于數(shù)理統(tǒng)計,意味著我們要處理一組數(shù),返回一些統(tǒng)計量(statistics)(如平均數(shù)(average) 中位數(shù)(median))

那么這樣的統(tǒng)計函數(shù)稱為統(tǒng)計函數(shù)(別名 組函數(shù) 多組函數(shù))

下一站:數(shù)據(jù)庫學習之MySQL (十一)——統(tǒng)計函數(shù)

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的mysql now str,数据库学习之MySQL (十)—— 日期和时间函数 NOW STR_TO_DATE DATE_FORMAT 流程控制函数 IF IFNULL CASE...的全部內容,希望文章能夠幫你解決所遇到的問題。

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