MySQL学习--标量函数之字符串函数

--标量函数字符串函数

--CHARACTER_LENGTH()
返回其参数中的字符数。
--LENGTH()
返回字符串的长度(以字节为单位)(而不是字符数)。


SELECT STREET,
            CHAR_LENGTH(STREET) len1,
            if( CHAR_LENGTH(STREET) > 10,
            CONCAT(LEFT(STREET,10),'...'),STREET) STREET2
from PLAYERS;

-- COALESCE():如果LEAGUENO不是空值,就返回LEAGUENO;如果LEAGUENO是空值,1就是第一个不为空值的参数,等同于如LEAGUENO为NULL时用参数1代替,类似于IF-THEN-ELSE语句  
SELECT INITIALS,NAME,COALESCE(LEAGUENO,'1') AS LEAGUENO
FROM PLAYERS;
-- 等同于以下语句
IF LEAGUENO IS NULL THEN
   RETURN '1'
ELSE 
   RETURN LEAGUENO
ENDIF;

-- CAST(expr AS type):转换数据类型
SELECT CAST('2021-04-02' AS DATE);   //2021-04-02;

-- CONCAT(str1,str2,...):用来把三个字符值连接起来
SELECT INITIALS,NAME,
       CONCAT(LEFT(INITIALS,1),'.',NAME) as full_name
from PLAYERS;                -- R.Everett

SELECT CONCAT('I','am','learning','SQL') AS CONCAT;     -- IamlearningSQL
SELECT CONCAT_WS('-','I','am','learning','SQL');       -- I-am-learning-SQL

-- LEFT(str,len)返回字符串的前n个字符
SELECT `NAME`,left(NAME,1) AS n
FROM PLAYERS;


-- <>表示不等于
SELECT e.emp_no, m.emp_no
FROM dept_emp e
JOIN dept_manager m
ON e.dept_no = m.dept_no
WHERE e.emp_no <> m.emp_no
AND m.to_date = '9999-01-01';

-- mod(emp_no,2)=1    MOD函数:求余数,结果为0则为偶数,结果为1则为奇数
select *
from employees
where mod(emp_no,2)=1 and last_name!='Mary'
order by hire_date desc;


-- LIMIT:强制返回指定记录数,可接受一个或两个参数,如果是两个参数,第一个是指偏移量,初始为0,第三个则为2,    第二个参数返回记录行的最大数目,( LIMIT 2,1 )    指仅返回第三行的一个数                
SELECT PLAYERNO
from PLAYERS
ORDER BY PLAYERNO DESC
LIMIT 2,1;

-- GROUP BY + HAVING 分组后再筛选出大于15的数据
select emp_no,count(*) as t
from salaries
group by emp_no
having t > 15;
-- SUBSTR(str,pos,len)、SUBSTRING(str FROM pos FOR len)   :注意,索引从1开始
##截取从指定索引处后面所有字符
select SUBSTR('今天阳光真好',4) out_put;      --光真好

##截取从指定索引处指定字符长度的字符
SELECT SUBSTR('今天阳光真好',1,4) out_put;    --今天阳光

##案例:姓名中首字符大写,其它字符小写然后用_拼接,显示出来
SELECT CONCAT(UPPER(SUBSTR(last_name,1,1)),'_',LOWER(SUBSTR(last_name,2))) out_put 
from employees;  

-- INSTR(str,substr) 返回子串第一次出现的索引,如果找不到返回0
SELECT INSTR('今天阳光真好','阳光') AS out_put;   -- 3

-- TRIM([remstr FROM] str) 首尾去除空格或首尾去除指定字符
SELECT LENGTH(TRIM('    今天阳光真好      ')) AS out_put;    -- 18
SELECT TRIM('a' from 'aaaaaaaa今天阳光真好aaaaaaaaaaaaaaaaa') AS out_put;     -- 把字符串的a去掉,返回今天阳光真好

-- LPAD(str,len,padstr) 用指定的字符实现左填充指定长度
SELECT LPAD('今天阳光真好',10,'*');

/*
-- 数学函数 
 */  
-- ROUND(X,D):四舍五入
SELECT ROUND(1.55);    -- 2
SELECT ROUND(1.567,2);    --1,57

-- CEIL(X) 向上取整,返回>=该参数的最小整数
-- FLOOR(X) 向下取整  

 

 

posted @ 2021-04-02 16:39  美女爱找茬  阅读(173)  评论(0编辑  收藏  举报