mysql 函数切割机_MySQL 函数

红色标题 TAG 中附有 ORACLE 特殊语句,与 MySQL 中的语句书写方法略有不同

建表语句

PS:NUMERIC 是大多数 DBMS 都支持的一种数据类型,通过 NUMBERIC ( 全体位数 , 小数位数 ) 的形式来指定数值的大小。

-- DDL :创建表

CREATE TABLE SampleMath

(m NUMERIC (10,3),

n INTEGER,

p INTEGER);

-- NUMERIC(10,3) 和 DECIMAL(10,3) 是等效的, 即 10个有效位数字,3个小数位数字

INSERT INTO SampleMath(m, n, p) VALUES (500, 0, NULL);

INSERT INTO SampleMath(m, n, p) VALUES (-180, 0, NULL);

INSERT INTO SampleMath(m, n, p) VALUES (NULL, NULL, NULL);

INSERT INTO SampleMath(m, n, p) VALUES (NULL, 7, 3);

INSERT INTO SampleMath(m, n, p) VALUES (NULL, 5, 2);

INSERT INTO SampleMath(m, n, p) VALUES (NULL, 4, NULL);

INSERT INTO SampleMath(m, n, p) VALUES (8, NULL, 3);

INSERT INTO SampleMath(m, n, p) VALUES (2.27, 1, NULL);

INSERT INTO SampleMath(m, n, p) VALUES (5.555,2, NULL);

INSERT INTO SampleMath(m, n, p) VALUES (NULL, 1, NULL);

INSERT INTO SampleMath(m, n, p) VALUES (8.76, NULL, NULL);

-- DDL :创建表

CREATE TABLE SampleStr

(str1 VARCHAR(40),

str2 VARCHAR(40),

str3 VARCHAR(40);

INSERT INTO SampleStr (str1, str2, str3) VALUES ('opx','rt',NULL);

INSERT INTO SampleStr (str1, str2, str3) VALUES ('abc','def' ,NULL);

INSERT INTO SampleStr (str1, str2, str3) VALUES ('山田','太郎' ,'是我');

INSERT INTO SampleStr (str1, str2, str3) VALUES ('aaa',NULL ,NULL);

INSERT INTO SampleStr (str1, str2, str3) VALUES (NULL,'xyz',NULL);

INSERT INTO SampleStr (str1, str2, str3) VALUES ('@!#$%',NULL,NULL);

INSERT INTO SampleStr (str1, str2, str3) VALUES ('ABC',NULL,NULL);

INSERT INTO SampleStr (str1, str2, str3) VALUES ('aBC',NULL,NULL);

INSERT INTO SampleStr (str1, str2, str3) VALUES ('abc太郎','abc','ABC');

INSERT INTO SampleStr (str1, str2, str3) VALUES ('abcdefabc','abc','ABC');

INSERT INTO SampleStr (str1, str2, str3) VALUES ('micmic','i','I');

绝对值函数 ABS()

-- 获取 m 的绝对值 m_abs

select m,

abs(m) as m_abs

from samplemath;

求余函数 MOD()

-- n % p 也可以获得结果(SQL-Server 中只支持这种用法)

select n,

p,

mod(n, p)

FROM samplemath;

大小写转换函数 LOWER() & UPPER()

-- 将 str 字符串全部转成小写

SELECT str1,LOWER(str1) FROM samplestr;

-- 将 str 字符串全部转成大写

SELECT str1,UPPER(str1) FROM samplestr;

计算字符串长度函数 LENGTH()

-- SQL-Server 中把 LENGTH 替换成 LEN

SELECT str1,LENGTH(str1) FROM samplestr;

替换字符串函数 REPLACE()

-- REPLACE(对象字符串,替换前的字符串,替换后的字符串)

SELECT str1,str2,str3,REPLACE(str1,str2,str3) AS str1_replace FROM samplestr;

-- 可以观察 ID = 9,10,11 的记录

-- 可以常量替换

SELECT str1,REPLACE(str1,"mic","wtf") AS str1_replace FROM samplestr;

字符串拼接函数 CONCAT() 和 ||

-- ORACLE PostGreSQL 中才能使用的语法

/*

SELECT str1, str2,

str1 || str2 AS str_concat

FROM SampleStr;

SELECT str1, str2, str3,

str1 || str2 || str3 AS str_concat

FROM SampleStr

WHERE str1 = '山田';

*/

-- SQL-SERVER 中可以使用的语法

/*

SELECT str1, str2, str3,

str1 + str2 + str3 AS str_concat

FROM SampleStr;

*/

-- MYSQL 中可以使用的语法

SELECT str1, str2, str3,

CONCAT(str1,str2,str3) AS str_concat

FROM SampleStr;

字符串切割函数 SUBSTRING() & SUBSTR()

-- SUBSTRING函数(PostgreSQL/MySQL专用语法)

-- SUBSTRING(对象字符串 FROM 截取的起始位置 FOR 截取的字符数)

SELECT str1,SUBSTRING(str1 FROM 3 FOR 2) AS str1_substring

from samplestr;

-- SQL Server 中写法做了简化

SELECT str1,

SUBSTRING(str1, 3, 2) AS sub_str

FROM SampleStr;

-- Oracle 中再次做了简化

SELECT str1,

SUBSTR(str1, 3, 2) AS sub_str

FROM SampleStr;

四舍五入函数 ROUND()

-- 针对 m 数字四舍五入到小数点后 n 位

-- ROUND(对象数值,保留小数的位数)

SELECT m,

n,

ROUND(m, n) AS m_round FROM samplemath;

日期函数 CURRENT_DATE/CURRENT_TIME/CURRENT_TIMESTAMP

-- 当前日期

SELECT CURRENT_DATE;

-- ORACLE 中需要指定临时表 DUAL

SELECT CURRENT_DATE FROM DUAL;

-- 当前时间

SELECT CURRENT_TIME;

-- ORACLE 中需要指定临时表 DUAL

SELECT CURRENT_TIME FROM DUAL;

-- CURRENT_TIMESTAMP 函数 = CURRENT_DATE + CURRENT_TIME

SELECT CURRENT_TIMESTAMP;

-- ORACLE 中需要指定临时表 DUAL

SELECT CURRENT_TIMESTAMP FROM DUAL;

日期切割函数 EXTRACT()

-- 使用 EXTRACT 函数可以截取出日期数据中的一部分,例如“年”“月”,或者“小时”“秒”等

-- 该函数的返回值并不是日期类型而是数值类型

SELECT CURRENT_TIMESTAMP,

EXTRACT(YEAR FROM CURRENT_TIMESTAMP) AS year,

EXTRACT(MONTH FROM CURRENT_TIMESTAMP) AS month,

EXTRACT(DAY FROM CURRENT_TIMESTAMP) AS day,

EXTRACT(HOUR FROM CURRENT_TIMESTAMP) AS hour,

EXTRACT(MINUTE FROM CURRENT_TIMESTAMP) AS minute,

EXTRACT(SECOND FROM CURRENT_TIMESTAMP) AS second;

-- 同样地, ORACLE 中需要指定临时表 DUAL

SELECT CURRENT_TIMESTAMP,

EXTRACT(YEAR FROM CURRENT_TIMESTAMP) AS year,

EXTRACT(MONTH FROM CURRENT_TIMESTAMP) AS month,

EXTRACT(DAY FROM CURRENT_TIMESTAMP) AS day,

EXTRACT(HOUR FROM CURRENT_TIMESTAMP) AS hour,

EXTRACT(MINUTE FROM CURRENT_TIMESTAMP) AS minute,

EXTRACT(SECOND FROM CURRENT_TIMESTAMP) AS second

FROM DUAL;

NULL 转换函数 COALESCE(),IFNULL(),NVL()

NULL 转换函数,即将值为 NULL 的值转换为指定值

COALESCE 函数在流行的 RDBMS 中都带有, IFNULL() 是 MySQL 自带的简化版函数,NVL 是 ORACLE 自带的简化版函数

-- COALESCE 函数会选择不是 NULL 的显示

SELECT COALESCE(NULL, 1) AS col_1,

COALESCE(NULL, 'test', NULL) AS col_2,

COALESCE(NULL, NULL, '2009-11-01') AS col_3;

-- 如果 str2 字段值为 NULL 那么将其置为 0

SELECT str2,COALESCE(str2,"0") AS str2_coalesce

FROM SampleStr;

-- 上一条语句可以用 IFNULL 函数替换

SELECT str2,IFNULL(str2,"0") AS str2_coalesce

FROM SampleStr;

-- 如果 str1 为 NULL 置为 str2,如果 str2 为 NULL 置为 str1,如果都为 NULL 置为 0

SELECT str1,str2,COALESCE(str1,str2,'0') AS str1_str2_coalesce

FROM SampleStr;

-- COALESCE 函数的逻辑是,CLALESCE(value1,value2,value3,....) 其中可以包含无限个值

-- 但是会获取第一个非 NULL 的值作为该函数的返回值

-- 相比 IFNULL 函数,COALESCE 函数的可用性更强,但 IFNULL 函数更加简化

-- ORACLE 中与 IFNULL 函数相对应的是 NVL 函数

类型转换函数 CAST()

-- SQL Server PostgreSQL

-- SELECT CAST('0001' AS INTEGER) AS int_col;

-- MySQL 需要加 SIGNED

SELECT CAST('0001' AS SIGNED INTEGER) AS int_col;

-- Oracle

-- SELECT CAST('0001' AS INTEGER) AS int_col FROM DUAL;

-- SQL Server PostgreSQL MySQL

SELECT CAST('2009-12-14' AS DATE) AS date_col;

-- Oracle

SELECT CAST('2009-12-14' AS DATE) AS date_col

FROM DUAL;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值