--标量函数字符串函数 --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) 向下取整