狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

[轉(zhuǎn)帖]SQL函數(shù)大全,史上最全,值得收藏!

liguoquan
2023年12月7日 17:31 本文熱度 728
:SQL函數(shù)大全,史上最全,值得收藏!


爆肝整理5k字SQL函數(shù)大全,分類(lèi)清晰,絕對(duì)值得收藏,想不起來(lái)用什么函數(shù)看它就沒(méi)錯(cuò)了!

不多廢話,直接上干貨。

1、聚合函數(shù)

2、數(shù)字函數(shù)

3、字符串函數(shù)

4、日期函數(shù)

5、轉(zhuǎn)換函數(shù)

6、系統(tǒng)函數(shù)

7、條件函數(shù)

8、加密函數(shù)

根據(jù)我的理解,SQL函數(shù)可以劃分成上述的8個(gè)類(lèi)別,接下來(lái)將一一為大家介紹。

一、聚合函數(shù)

AVG(col) 返回指定列中所有的平均值。僅用于數(shù)字列并自動(dòng)忽略NULL值。

COUNT(col) 返回指定列中非NULL值的數(shù)量。可用于數(shù)字和字符列。

COUNT(*) 返回表中的行數(shù)(包括有NULL值的列)。

MAX(col) 返回指定列中的最大值,忽略NULL值。可用于數(shù)字、字符和日期時(shí)間列。

MIN(col) 返回指定列中的最小值,忽略NULL值。可用于數(shù)字、字符和日期時(shí)間列。

SUM(col) 返回指定列中所有的總和,忽略NULL值。僅用于數(shù)字列。

二、數(shù)字函數(shù)

ACOS(float_expr) 返回角(以弧度表示),它的余弦值近似于指定的浮點(diǎn)表達(dá)式。

ASIN(float_expr) 返回角(以弧度表示),它的正弦值近似于指定的浮點(diǎn)表達(dá)式。

ATAN(float_expr) 返回角(以弧度表示),它的正切值近似于指定的浮點(diǎn)表達(dá)式。

ATN2(float_expr1, float_expr2) 返回角(以弧度表示),它的正切值在兩個(gè)近似的浮點(diǎn)表達(dá)式之間。

COS(float_expr) 返回以浮點(diǎn)表達(dá)式表示的近似于指定角度(以弧度表示)的余弦三角函數(shù)的值。

COT(float_expr) 返回以浮點(diǎn)表達(dá)式表示的近似于指定角度(以弧度表示)的余切三角函數(shù)的值。

SIN(float_expr) 返回以浮點(diǎn)表達(dá)式表示的近似于指定角度(以弧度表示)的正弦三角函數(shù)的值。

TAN(float_expr) 返回以浮點(diǎn)表達(dá)式表示的近似于指定角度(以弧度表示)的正切三角函數(shù)的值。

ABS(num_expr) 返回?cái)?shù)值表達(dá)式的絕對(duì)值。

CEILING(num_expr) 返回大于或等于數(shù)值表達(dá)式的最小整數(shù)。

FLOOR(num_expr) 返回小于或等于數(shù)值表達(dá)式的最大整數(shù)。

DEGREES(num_expr)返回?cái)?shù)值表達(dá)式表示的弧度值對(duì)應(yīng)的度值。

RADIANS(num_expr) 返回?cái)?shù)值表達(dá)式表示的度值對(duì)應(yīng)的弧度值。

EXP(float_expr) 根據(jù)指定的近似浮點(diǎn)表達(dá)式,返回指數(shù)值。

LOG(float_expr) 根據(jù)指定的近似浮點(diǎn)表達(dá)式,返回自然對(duì)數(shù)值。

LOG10(float_expr) 根據(jù)指定的近似浮點(diǎn)表達(dá)式,返回以10為底的對(duì)數(shù)。

POWER(num_expr,y) 返回冪為y的數(shù)值表達(dá)式的值。

SQRT(float_expr) 返回指定的近似浮點(diǎn)表達(dá)式的平方根。

SQUARE(float_expr) 返回浮點(diǎn)表達(dá)式的平方值。

PI() 返回常量值3.141592653589793。

RAND([seed]) 隨機(jī)返回的0到1之間的近似浮點(diǎn)值,可以對(duì)seed指定為整數(shù)表達(dá)式(可選)。

ROUND(num_expr,length) 對(duì)數(shù)值表達(dá)式截取指定的長(zhǎng)度,返回四舍五入后的值。

SIGN(num_expr) 對(duì)正數(shù)執(zhí)行+1操作,對(duì)負(fù)數(shù)和零執(zhí)行-1操作。

三、字符串函數(shù)

主要用于char和varchar數(shù)據(jù)類(lèi)型。

Expr1+expr2 返回兩個(gè)表達(dá)式的組合形式的字符串。

CONCAT(char_expr1, char_expr2, char_exprn) 返回連接的字符串。

ASCII(char_expr) char_expr可以是文字字符,字符串表達(dá)式或列。如果char_expr有多個(gè)字符,則該函數(shù)返回其最左側(cè)字符的ASCII代碼值。

CHAR(int_expr) 返回到之間的整數(shù)表達(dá)式的ASCⅡ字符值。如果輸入的值不在有效范圍內(nèi),則返回NULL。

CHARINDEX('pattern',char_expr) 返回字符表達(dá)式中指定模式的起始位置。

PATINDEX('%pattern%',expr) 返回表達(dá)式中模式第一次出現(xiàn)的起始位置。返回表示不存在模式形式。

FIELD(char_expr, char_expr1, char_expr2, char_expr3,...) 在char_expr之后的字符串中尋找char_expr,并返回出現(xiàn)的索引位置。

DIFFERENCE(char_expr1,char_expr2) 根據(jù)比較兩個(gè)字符表達(dá)式的相似度,返回到之間的值。表示匹配度最佳。

SOUNDEX(char_expr) 評(píng)估兩個(gè)字符串的相似度后得到的位代碼。

LEN(char_expr) 返回字符表達(dá)式的長(zhǎng)度。

LOWER(char_expr) 將字符表達(dá)式全部轉(zhuǎn)換為小寫(xiě)。

UPPER(char_expr) 將字符表達(dá)式全部轉(zhuǎn)換為大寫(xiě)。

LTRIM(char_expr) 返回刪除掉前面空格的字符表達(dá)式。

RTRIM(char_expr) 返回刪除掉其后空格的字符表達(dá)式。

TRIM(char_expr ) 返回刪除掉開(kāi)頭和結(jié)尾空格的字符表達(dá)式。

SPACE(int_expr) 返回包含指定空格數(shù)的字符串。

REPLICATE(input_string,count) 返回重復(fù)指定次數(shù)的字符表達(dá)式產(chǎn)生的字符串。

RIGHT(char_expr,int_expr) 返回從字符表達(dá)式最右端起根據(jù)指定的字符個(gè)數(shù)得到的字符。

STUFF(char_expr1,start,length,char_expr2) 使用字符表達(dá)式替換字符表達(dá)式的一部分字符,從指定的位置開(kāi)始替換指定的長(zhǎng)度。

SUBSTRING(char_expr,start,length) 返回從字符表達(dá)式的指定位置開(kāi)始,截取指定長(zhǎng)度得到的字符集。

STR(float_expr[,length[,decimal]]) 返回浮點(diǎn)表達(dá)式的字符串表示法。

OCT(char_expr) 返回八進(jìn)制參數(shù)的字符串表示。

REVERSE(char_expr) 反轉(zhuǎn)字符表達(dá)式。

四、日期函數(shù)

1、獲取時(shí)間

GETDATE() 當(dāng)前的系統(tǒng)日期。

select GETDATE() -- 2019-05-07 18:34:27.343

#獲取當(dāng)前日期還可使用CURRENT_TIMESTAMP()、LOCALTIME()、LOCALTIMESTAMP()。

DATENAME(日期部分,date) 返回日期中日期部分的字符串形式。

select DATENAME(dw,GETDATE()) -- 星期二

注:DATENAME 和 DATEPART 的區(qū)別,返回的值類(lèi)型不同,一個(gè)是VARCHAR一個(gè)是INT,另外就是星期會(huì)用本地語(yǔ)言來(lái)表示

DATEPART(日期部分,date) 返回日期中指定的日期部分的整數(shù)形式。

select DATEPART(dw,GETDATE()) -- (返回今天是一周中的第幾天):3

YEAR(date) 返回指定日期的年份數(shù)值

select YEAR(GETDATE()) -- 2019

MONTH(date)返回指定日期的月份數(shù)值

DAY(date)返回指定日期的天數(shù)值

還可使用EXTRACT()抽取日期。

# 對(duì)于時(shí)間2021-04-02 09:25:29,分別獲取其年、月、日、時(shí)、分、秒

select EXTRACT(YEAR from NOW()); # 2021

select EXTRACT(MONTH from NOW()); # 4

select EXTRACT(DAY from NOW()); # 2

select EXTRACT(HOUR from NOW()); # 9

select EXTRACT(MINUTE from NOW()); # 25

select EXTRACT(SECOND from NOW()); # 29

# 或者從日期格式字符串中獲取

select EXTRACT(SECOND from '2021-04-02 10:37:14.123456'); # 14

2、增加、減少日期

# 時(shí)間減少1小時(shí)(前一小時(shí))

select date_sub(now(), INTERVAL 1 hour);

# 日期增加1天

select date_add(now(), INTERVAL 1 day);

# 其他間隔

YEAR、MONTH、DAY、HOUR、MINUTE、SECOND

以下較全的MySQL日期函數(shù)加示例可做參考(原文鏈接:blog.csdn.net/qinshijan

-- MySQL日期時(shí)間處理函數(shù)

-- 當(dāng)前日期:2017-05-12(突然發(fā)現(xiàn)今天512,是不是會(huì)拉防空警報(bào))

select NOW() from DUAL;-- 當(dāng)前日期時(shí)間:2017-05-12 11:41:47

-- 在MySQL里也存在和Oracle里類(lèi)似的dual虛擬表:官方聲明純粹是為了滿足select ... from...這一習(xí)慣問(wèn)題,mysql會(huì)忽略對(duì)該表的引用。

-- 那么MySQL中就不用DUAL了吧。

select NOW();-- 當(dāng)前日期時(shí)間:2017-05-12 11:41:55

-- 除了 now() 函數(shù)能獲得當(dāng)前的日期時(shí)間外,MySQL 中還有下面的函數(shù):

select CURRENT_TIMESTAMP();-- 2017-05-15 10:19:31

select CURRENT_TIMESTAMP;-- 2017-05-15 10:19:51

select LOCALTIME();-- 2017-05-15 10:20:00

select LOCALTIME;-- 2017-05-15 10:20:10

select LOCALTIMESTAMP();-- 2017-05-15 10:20:21(v4.0.6)

select LOCALTIMESTAMP;-- 2017-05-15 10:20:30(v4.0.6)

-- 這些日期時(shí)間函數(shù),都等同于 now()。鑒于 now() 函數(shù)簡(jiǎn)短易記,建議總是使用 now()來(lái)替代上面列出的函數(shù)。

select SYSDATE();-- 當(dāng)前日期時(shí)間:2017-05-12 11:42:03

-- sysdate() 日期時(shí)間函數(shù)跟 now() 類(lèi)似,

-- 不同之處在于:now() 在執(zhí)行開(kāi)始時(shí)值就得到了;sysdate() 在函數(shù)執(zhí)行時(shí)動(dòng)態(tài)得到值。

-- 看下面的例子就明白了:

select NOW(), SLEEP(3), NOW();

select SYSDATE(), SLEEP(3), SYSDATE();

select CURDATE();-- 當(dāng)前日期:2017-05-12

select CURRENT_DATE();-- 當(dāng)前日期:等同于 CURDATE()

select CURRENT_DATE;-- 當(dāng)前日期:等同于 CURDATE()

select CURTIME();-- 當(dāng)前時(shí)間:11:42:47

select CURRENT_TIME();-- 當(dāng)前時(shí)間:等同于 CURTIME()

select CURRENT_TIME;-- 當(dāng)前時(shí)間:等同于 CURTIME()

-- 獲得當(dāng)前 UTC 日期時(shí)間函數(shù)

select UTC_TIMESTAMP(), UTC_DATE(), UTC_TIME()

-- MySQL 獲得當(dāng)前時(shí)間戳函數(shù):current_timestamp, current_timestamp()

select CURRENT_TIMESTAMP, CURRENT_TIMESTAMP();-- 2017-05-15 10:32:21 | 2017-05-15 10:32:21

-- MySQL 日期時(shí)間 Extract(選取) 函數(shù)

SET @dt = '2017-05-15 10:37:14.123456';

select DATE(@dt);-- 獲取日期:2017-05-15

select TIME('2017-05-15 10:37:14.123456');-- 獲取時(shí)間:10:37:14.123456

select YEAR('2017-05-15 10:37:14.123456');-- 獲取年份

select MONTH('2017-05-15 10:37:14.123456');-- 獲取月份

select DAY('2017-05-15 10:37:14.123456');-- 獲取日

select HOUR('2017-05-15 10:37:14.123456');-- 獲取時(shí)

select MINUTE('2017-05-15 10:37:14.123456');-- 獲取分

select SECOND('2017-05-15 10:37:14.123456');-- 獲取秒

select MICROSECOND('2017-05-15 10:37:14.123456');-- 獲取毫秒

select QUARTER('2017-05-15 10:37:14.123456');-- 獲取季度

select WEEK('2017-05-15 10:37:14.123456');-- 20 (獲取周)

select WEEK('2017-05-15 10:37:14.123456', 7);-- ****** 測(cè)試此函數(shù)在MySQL5.6下無(wú)效

select WEEKOFYEAR('2017-05-15 10:37:14.123456');-- 同week()

select DAYOFYEAR('2017-05-15 10:37:14.123456');-- 135 (日期在年度中第幾天)

select DAYOFMONTH('2017-05-15 10:37:14.123456');-- 5 (日期在月度中第幾天)

select DAYOFWEEK('2017-05-15 10:37:14.123456');-- 2 (日期在周中第幾天;周日為第一天)

select WEEKDAY('2017-05-15 10:37:14.123456');-- 0

select WEEKDAY('2017-05-21 10:37:14.123456');-- 6(與dayofweek()都表示日期在周的第幾天,只是參考標(biāo)準(zhǔn)不同,weekday()周一為第0天,周日為第6天)

select YEARWEEK('2017-05-15 10:37:14.123456');-- 201720(年和周)

select EXTRACT(YEAR from '2017-05-15 10:37:14.123456');

select EXTRACT(MONTH from '2017-05-15 10:37:14.123456');

select EXTRACT(DAY from '2017-05-15 10:37:14.123456');

select EXTRACT(HOUR from '2017-05-15 10:37:14.123456');

select EXTRACT(MINUTE from '2017-05-15 10:37:14.123456');

select EXTRACT(SECOND from '2017-05-15 10:37:14.123456');

select EXTRACT(MICROSECOND from '2017-05-15 10:37:14.123456');

select EXTRACT(QUARTER from '2017-05-15 10:37:14.123456');

select EXTRACT(WEEK from '2017-05-15 10:37:14.123456');

select EXTRACT(YEAR_MONTH from '2017-05-15 10:37:14.123456');

select EXTRACT(DAY_HOUR from '2017-05-15 10:37:14.123456');

select EXTRACT(DAY_MINUTE from '2017-05-15 10:37:14.123456');-- 151037(日時(shí)分)

select EXTRACT(DAY_SECOND from '2017-05-15 10:37:14.123456');-- 15103714(日時(shí)分秒)

select EXTRACT(DAY_MICROSECOND from '2017-05-15 10:37:14.123456');-- 15103714123456(日時(shí)分秒毫秒)

select EXTRACT(HOUR_MINUTE from '2017-05-15 10:37:14.123456');-- 1037(時(shí)分)

select EXTRACT(HOUR_SECOND from '2017-05-15 10:37:14.123456');-- 103714(時(shí)分秒)

select EXTRACT(HOUR_MICROSECOND from '2017-05-15 10:37:14.123456');-- 103714123456(日時(shí)分秒毫秒)

select EXTRACT(MINUTE_SECOND from '2017-05-15 10:37:14.123456');-- 3714(分秒)

select EXTRACT(MINUTE_MICROSECOND from '2017-05-15 10:37:14.123456');-- 3714123456(分秒毫秒)

select EXTRACT(SECOND_MICROSECOND from '2017-05-15 10:37:14.123456');-- 14123456(秒毫秒)

-- MySQL Extract() 函數(shù)除了沒(méi)有date(),time() 的功能外,其他功能一應(yīng)具全。

-- 并且還具有選取‘day_microsecond' 等功能。

-- 注意這里不是只選取 day 和 microsecond,而是從日期的 day 部分一直選取到 microsecond 部分。

select DAYNAME('2017-05-15 10:37:14.123456');-- Monday(返回英文星期)

select MONTHNAME('2017-05-15 10:37:14.123456');-- May(返回英文月份)

select LAST_DAY('2016-02-01');-- 2016-02-29 (返回月份中最后一天)

select LAST_DAY('2016-05-01');-- 2016-05-31

-- DATE_ADD(date,INTERVAL expr type) 從日期加上指定的時(shí)間間隔

-- type參數(shù)可參考:w3school.com.cn/sql/fun

select DATE_ADD('2017-05-15 10:37:14.123456',INTERVAL 1 YEAR);-- 表示:2018-05-15 10:37:14.123456

select DATE_ADD('2017-05-15 10:37:14.123456',INTERVAL 1 QUARTER);-- 表示:2017-08-15 10:37:14.123456

select DATE_ADD('2017-05-15 10:37:14.123456',INTERVAL 1 MONTH);-- 表示:2017-06-15 10:37:14.123456

select DATE_ADD('2017-05-15 10:37:14.123456',INTERVAL 1 WEEK);-- 表示:2017-05-22 10:37:14.123456

select DATE_ADD('2017-05-15 10:37:14.123456',INTERVAL 1 DAY);-- 表示:2017-05-16 10:37:14.123456

select DATE_ADD('2017-05-15 10:37:14.123456',INTERVAL 1 HOUR);-- 表示:2017-05-15 11:37:14.123456

select DATE_ADD('2017-05-15 10:37:14.123456',INTERVAL 1 MINUTE);-- 表示:2017-05-15 10:38:14.123456

select DATE_ADD('2017-05-15 10:37:14.123456',INTERVAL 1 SECOND);-- 表示:2017-05-15 10:37:15.123456

select DATE_ADD('2017-05-15 10:37:14.123456',INTERVAL 1 MICROSECOND);-- 表示:2017-05-15 10:37:14.123457

-- DATE_SUB(date,INTERVAL expr type) 從日期減去指定的時(shí)間間隔

select DATE_SUB('2017-05-15 10:37:14.123456',INTERVAL 1 YEAR);-- 表示:2016-05-15 10:37:14.123456

select DATE_SUB('2017-05-15 10:37:14.123456',INTERVAL 1 QUARTER);-- 表示:2017-02-15 10:37:14.123456

select DATE_SUB('2017-05-15 10:37:14.123456',INTERVAL 1 MONTH);-- 表示:2017-04-15 10:37:14.123456

select DATE_SUB('2017-05-15 10:37:14.123456',INTERVAL 1 WEEK);-- 表示:2017-05-08 10:37:14.123456

select DATE_SUB('2017-05-15 10:37:14.123456',INTERVAL 1 DAY);-- 表示:2017-05-14 10:37:14.123456

select DATE_SUB('2017-05-15 10:37:14.123456',INTERVAL 1 HOUR);-- 表示:2017-05-15 09:37:14.123456

select DATE_SUB('2017-05-15 10:37:14.123456',INTERVAL 1 MINUTE);-- 表示:2017-05-15 10:36:14.123456

select DATE_SUB('2017-05-15 10:37:14.123456',INTERVAL 1 SECOND);-- 表示:2017-05-15 10:37:13.123456

select DATE_SUB('2017-05-15 10:37:14.123456',INTERVAL 1 MICROSECOND);-- 表示:2017-05-15 10:37:14.123455

-- 經(jīng)特殊日期測(cè)試,DATE_SUB(date,INTERVAL expr type)可放心使用

select DATE_SUB(CURDATE(),INTERVAL 1 DAY);-- 前一天:2017-05-11

select DATE_SUB(CURDATE(),INTERVAL -1 DAY);-- 后一天:2017-05-13

select DATE_SUB(CURDATE(),INTERVAL 1 MONTH);-- 一個(gè)月前日期:2017-04-12

select DATE_SUB(CURDATE(),INTERVAL -1 MONTH);-- 一個(gè)月后日期:2017-06-12

select DATE_SUB(CURDATE(),INTERVAL 1 YEAR);-- 一年前日期:2016-05-12

select DATE_SUB(CURDATE(),INTERVAL -1 YEAR);-- 一年后日期:20178-06-12

-- MySQL date_sub() 日期時(shí)間函數(shù) 和 date_add() 用法一致,并且可以用INTERNAL -1 xxx的形式互換使用;

-- 另外,MySQL 中還有兩個(gè)函數(shù) subdate(), subtime(),建議,用 date_sub() 來(lái)替代。

-- MySQL 另類(lèi)日期函數(shù):period_add(P,N), period_diff(P1,P2)

-- 函數(shù)參數(shù)“P” 的格式為“YYYYMM” 或者 “YYMM”,第二個(gè)參數(shù)“N” 表示增加或減去 N month(月)。

-- MySQL period_add(P,N):日期加/減去N月。

select PERIOD_ADD(201705,2), PERIOD_ADD(201705,-2);-- 201707 20170503

-- period_diff(P1,P2):日期 P1-P2,返回 N 個(gè)月。

select PERIOD_DIFF(201706, 201703);--

-- datediff(date1,date2):兩個(gè)日期相減 date1 - date2,返回天數(shù)

select DATEDIFF('2017-06-05','2017-05-29');-- 7

-- TIMEDIFF(time1,time2):兩個(gè)日期相減 time1 - time2,返回 TIME 差值

select TIMEDIFF('2017-06-05 19:28:37', '2017-06-05 17:00:00');-- 02:28:37

-- MySQL日期轉(zhuǎn)換函數(shù)

select TIME_TO_SEC('01:00:05'); -- 3605

select SEC_TO_TIME(3605);-- 01:00:05

-- MySQL (日期、天數(shù))轉(zhuǎn)換函數(shù):to_days(date), from_days(days)

select TO_DAYS('0000-00-00'); -- NULL

select TO_DAYS('2017-06-05'); -- 736850

select from_DAYS(0); -- '0000-00-00'

select from_DAYS(736850); -- '2017-06-05'

-- MySQL Str to Date (字符串轉(zhuǎn)換為日期)函數(shù):str_to_date(str, format)

select STR_TO_DATE('06.05.2017 19:40:30', '%m.%d.%Y %H:%i:%s');-- 2017-06-05 19:40:30

select STR_TO_DATE('06/05/2017', '%m/%d/%Y'); -- 2017-06-05

select STR_TO_DATE('2017/12/3','%Y/%m/%d') -- 2017-12-03

select STR_TO_DATE('20:09:30', '%h:%i:%s') -- NULL(超過(guò)12時(shí)的小時(shí)用小寫(xiě)h,得到的結(jié)果為NULL)

-- 日期時(shí)間格式化

select DATE_FORMAT('2017-05-12 17:03:51', '%Y年%m月%d日 %H時(shí)%i分%s秒');-- 2017年05月12日 17時(shí)03分51秒(具體需要什么格式的數(shù)據(jù)根據(jù)實(shí)際情況來(lái);小寫(xiě)h為12小時(shí)制;)

select TIME_FORMAT('2017-05-12 17:03:51', '%Y年%m月%d日 %H時(shí)%i分%s秒');-- 0000年00月00日 17時(shí)03分51秒(time_format()只能用于時(shí)間的格式化)

-- STR_TO_DATE()和DATE_FORMATE()為互逆操作

-- MySQL 獲得國(guó)家地區(qū)時(shí)間格式函數(shù):get_format()

-- MySQL get_format() 語(yǔ)法:get_format(date|time|datetime, 'eur'|'usa'|'jis'|'iso'|'internal'

-- MySQL get_format() 用法的全部示例:

select GET_FORMAT(DATE,'usa'); -- '%m.%d.%Y'

select GET_FORMAT(DATE,'jis'); -- '%Y-%m-%d'

select GET_FORMAT(DATE,'iso'); -- '%Y-%m-%d'

select GET_FORMAT(DATE,'eur'); -- '%d.%m.%Y'

select GET_FORMAT(DATE,'internal'); -- '%Y%m%d'

select GET_FORMAT(DATETIME,'usa'); -- '%Y-%m-%d %H.%i.%s'

select GET_FORMAT(DATETIME,'jis'); -- '%Y-%m-%d %H:%i:%s'

select GET_FORMAT(DATETIME,'iso'); -- '%Y-%m-%d %H:%i:%s'

select GET_FORMAT(DATETIME,'eur'); -- '%Y-%m-%d %H.%i.%s'

select GET_FORMAT(DATETIME,'internal'); -- '%Y%m%d%H%i%s'

select GET_FORMAT(TIME,'usa'); -- '%h:%i:%s %p'

select GET_FORMAT(TIME,'jis'); -- '%H:%i:%s'

select GET_FORMAT(TIME,'iso'); -- '%H:%i:%s'

select GET_FORMAT(TIME,'eur'); -- '%H.%i.%s'

select GET_FORMAT(TIME,'internal'); -- '%H%i%s'

-- MySQL 拼湊日期、時(shí)間函數(shù):makdedate(year,dayofyear), maketime(hour,minute,second)

select MAKEDATE(2017,31); -- '2017-01-31'

select MAKEDATE(2017,32); -- '2017-02-01'

select MAKETIME(19,52,35); -- '19:52:35'

-- MySQL 時(shí)區(qū)(timezone)轉(zhuǎn)換函數(shù):convert_tz(dt,from_tz,to_tz)

select CONVERT_TZ('2017-06-05 19:54:12', '+08:00', '+00:00'); -- 2017-06-05 11:54:12

-- MySQL (Unix 時(shí)間戳、日期)轉(zhuǎn)換函數(shù)

-- unix_timestamp(), unix_timestamp(date), from_unixtime(unix_timestamp), from_unixtime(unix_timestamp,format)

-- 將具體時(shí)間時(shí)間轉(zhuǎn)為timestamp

select UNIX_TIMESTAMP();-- 當(dāng)前時(shí)間的時(shí)間戳:1494815779

select UNIX_TIMESTAMP('2017-05-15');-- 指定日期的時(shí)間戳:1494777600

select UNIX_TIMESTAMP('2017-05-15 10:37:14');-- 指定日期時(shí)間的時(shí)間戳:1494815834

-- 將時(shí)間戳轉(zhuǎn)為具體時(shí)間

select from_UNIXTIME(1494815834);-- 2017-05-15 10:37:14

select from_UNIXTIME(1494815834, '%Y年%m月%d日 %h時(shí)%分:%s秒');-- 獲取時(shí)間戳對(duì)應(yīng)的格式化日期時(shí)間

-- MySQL 時(shí)間戳(timestamp)轉(zhuǎn)換、增、減函數(shù)

select TIMESTAMP('2017-05-15');-- 2017-05-15 00:00:00

select TIMESTAMP('2017-05-15 08:12:25', '01:01:01');-- 2017-05-15 09:13:26

select DATE_ADD('2017-05-15 08:12:25', INTERVAL 1 DAY);-- 2017-05-16 08:12:25

select TIMESTAMPADD(DAY, 1, '2017-05-15 08:12:25');-- 2017-05-16 08:12:25; MySQL timestampadd() 函數(shù)類(lèi)似于 date_add()。

select TIMESTAMPDIFF(YEAR, '2017-06-01', '2016-05-15');-- -1

select TIMESTAMPDIFF(MONTH, '2017-06-01', '2016-06-15');-- -11

select TIMESTAMPDIFF(DAY, '2017-06-01', '2016-06-15');-- -351

select TIMESTAMPDIFF(HOUR, '2017-06-01 08:12:25', '2016-06-15 00:00:00');-- -8432

select TIMESTAMPDIFF(MINUTE, '2017-06-01 08:12:25', '2016-06-15 00:00:00');-- -505932

select TIMESTAMPDIFF(SECOND, '2017-06-01 08:12:25', '2016-06-15 00:00:00');-- -30355945

SQL中日期的表示方法及有效范圍,如下:

日期部分縮寫(xiě)日期部分縮寫(xiě)
yy1753-9999wk1-53
季度qq1-4小時(shí)hh0-23
mm1-12分鐘mi0-59
一年中的天dy1-366ss0-59
一月中的天dd1-31毫秒ms0-999
一周中的天dw1-7


五、轉(zhuǎn)換函數(shù)

1、下列兩個(gè)函數(shù)用于將(任何類(lèi)型的)值轉(zhuǎn)換為指定的數(shù)據(jù)類(lèi)型。

CONVERT(data_type[(length)], expression [, style])

expression - 要轉(zhuǎn)換的表達(dá)式。

datatype - 要將表達(dá)式轉(zhuǎn)換為的數(shù)據(jù)類(lèi)型。

format - 可選-指定日期和時(shí)間格式的整數(shù)代碼,用于在日期/時(shí)間/時(shí)間戳數(shù)據(jù)類(lèi)型和字符數(shù)據(jù)類(lèi)型之間進(jìn)行轉(zhuǎn)換。

CAST(expression AS datatype(length))

expression - 要轉(zhuǎn)換的表達(dá)式。

datatype - 要將表達(dá)式轉(zhuǎn)換為的數(shù)據(jù)類(lèi)型。

length - 可選。結(jié)果數(shù)據(jù)類(lèi)型的長(zhǎng)度(對(duì)于 char、varchar、nchar、nvarchar、binary 和 varbinary)

CAST 和 CONVERT 提供相似的功能,但語(yǔ)法不同。在時(shí)間轉(zhuǎn)化中一般用convert,因?yàn)樗萩ast多了一個(gè)style,可以根據(jù)需要轉(zhuǎn)化成不同的時(shí)間格式。

2、日期相關(guān)的轉(zhuǎn)換函數(shù)

# 轉(zhuǎn)換日期格式:

DATE_FORMAT(date, format)

select DATE_FORMAT(now(),'%Y-%m-%d %H:%i:%s');

select DATE_FORMAT(now(),'%Y-%m-%d %H:00:00');

#字符串轉(zhuǎn)日期格式

str_to_date(date, format)

select str_to_date('2021-04-02 10:37:14', '%Y-%m-%d %H:%i:%s'); # 2021-04-02 10:37:14

3、其他

FORMAT(column_name,format) 用于對(duì)字段的顯示進(jìn)行格式化。

INET_ATON(ip) 返回IP地址的數(shù)字表示。

INET_NTOA(num) 返回?cái)?shù)字所代表的IP地址。

六、系統(tǒng)函數(shù)

用于返回元數(shù)據(jù)或相關(guān)配置設(shè)置。

COALESCE(expr1,expr2, xprN) 返回第一個(gè)非NULL表達(dá)式。

COL_LENGTH('table_name','column_name') 返回列的長(zhǎng)度。

COL_NAME(table_id,column_id) 返回指定的表中的列名。

DATALENGTH('expr') 返回任何數(shù)據(jù)類(lèi)型的實(shí)際長(zhǎng)度。

DB_ID([‘database_name']) 返回?cái)?shù)據(jù)庫(kù)的標(biāo)識(shí)號(hào)。

DB_NAME([database_id]) 返回?cái)?shù)據(jù)庫(kù)的名稱。

GETANSINULL([‘database_name']) 返回?cái)?shù)據(jù)庫(kù)的默認(rèn)空性(Nullability)。

HOST_ID() 返回工作站的標(biāo)識(shí)號(hào)。

HOST_NAME() 返回工作站的名稱。

IDENT_INCR('table_or_view') 有新的記錄添加入到表中時(shí)計(jì)數(shù)加。

IDENT_SEED('table_or_view') 返回標(biāo)識(shí)列的起始編號(hào)。

INDEX_COL('table_name',index_id,key_id) 返回索引的列名。

ISNULL(expr,value) 使用指定的值替換的NULL表達(dá)式。

NULLIF(expr1,expr2) Expr1與Expr2相等時(shí),返回Null。

OBJECT_ID('obj_name') 返回?cái)?shù)據(jù)庫(kù)對(duì)象標(biāo)識(shí)號(hào)。

OBJECT_NAME('object_id') 返回?cái)?shù)據(jù)庫(kù)對(duì)象名。

STATS_DATE(table_id,index_id) 返回上次更新指定索引的統(tǒng)計(jì)的日期。

SUSER_SID([‘login_name']) 返回用戶的登錄標(biāo)識(shí)號(hào)。

SUSER_ID([‘login_name']) 返回用戶的登錄標(biāo)識(shí)號(hào)。這個(gè)函數(shù)類(lèi)似于SUSER_SID()函數(shù),并且保留了向后的兼容性。

SUSER_SNAME([server_user_id]) 返回用戶的登錄標(biāo)識(shí)號(hào)。

SUSER_NAME([server_user_id]) 返回用戶的登錄標(biāo)識(shí)號(hào)。這個(gè)函數(shù)類(lèi)似于SUSER_SNAME()函數(shù),并且保留了向后的兼容性。

USER_ID('user_name') 返回用戶的數(shù)據(jù)庫(kù)標(biāo)識(shí)號(hào)。

USER_NAME(['user_id']) 返回用戶的數(shù)據(jù)庫(kù)名稱。

七、條件函數(shù)

條件函數(shù)有兩類(lèi),一類(lèi)是CASE(),另一類(lèi)是IF()。

1、CASE()

case()函數(shù)有兩種形式,分為簡(jiǎn)單型和搜索型

簡(jiǎn)單搜索:

CASE V0

WHEN V1 THEN E1

WHEN V2 THEN E2

WHEN VN THEN EN

ELSE ED

END;

復(fù)雜搜索:

CASE

WHEN condition1 THEN result1

WHEN condition2 THEN result2

WHEN conditionN THEN resultN

ELSE result

END;

簡(jiǎn)單的case表達(dá)式?jīng)]有搜索型case表達(dá)式靈活,因?yàn)闊o(wú)法指定自己的條件,而搜索型case表達(dá)式可以包含范圍條件、不等條件、使用and/or/not組合多個(gè)條件,所以,除最簡(jiǎn)單的邏輯之外,一般推薦使用搜索型case表達(dá)式。

2、IF()

IF(condition, value_if_true, value_if_false)

condition -- 要進(jìn)行判斷的值

value_if_true -- condition為真時(shí)返回的值

value_if_false -- condition為假時(shí)返回的值

IF()函數(shù)還衍生出了IFNULL()、NULLIF()函數(shù)。

八、加密函數(shù)

AES_ENCRYPT(str,key) 返回用密鑰key對(duì)字符串str利用高級(jí)加密標(biāo)準(zhǔn)算法加密后的結(jié)果,調(diào)用AES_ENCRYPT的結(jié)果是一個(gè)二進(jìn)制字符串,以BLOB類(lèi)型存儲(chǔ)

AES_DECRYPT(str,key) 返回用密鑰key對(duì)字符串str利用高級(jí)加密標(biāo)準(zhǔn)算法解密后的結(jié)果

DECODE(str,key) 使用key作為密鑰解密加密字符串str

ENCRYPT(str,salt) 使用UNIXcrypt()函數(shù),用關(guān)鍵詞salt(一個(gè)可以惟一確定口令的字符串,就像鑰匙一樣)加密字符串str

ENCODE(str,key) 使用key作為密鑰加密字符串str,調(diào)用ENCODE()的結(jié)果是一個(gè)二進(jìn)制字符串,它以BLOB類(lèi)型存儲(chǔ)

MD5() 計(jì)算字符串str的MD5校驗(yàn)和

PASSWORD(str) 返回字符串str的加密版本,這個(gè)加密過(guò)程是不可逆轉(zhuǎn)的,和UNIX密碼加密過(guò)程使用不同的算法。

SHA() 計(jì)算字符串str的安全散列算法(SHA)校驗(yàn)和


該文章在 2023/12/7 17:31:47 編輯過(guò)
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專(zhuān)業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車(chē)隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類(lèi)企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷(xiāo)售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved