申请域名就可以做网站了吗,制作书签图片,工商核名在哪个网站,免费视频网站怎么赚钱数据处理函数
函数功能OracleMysqlMicrosoft SQL ServerPostgreSQLSQLiteABS(x)计算x的绝对值√√√√√CEIL(x)CEILING(x)大于等于x的最小整数CEIL(x)√CEILING(x)√CEIL(x)FLOOR(x)小于等于x的最大整数√√√√√MOD(x)x除以y的余数(x%y)√√x % y√x % yROUND(x,n)x四舍五入…数据处理函数
函数功能OracleMysqlMicrosoft SQL ServerPostgreSQLSQLiteABS(x)计算x的绝对值√√√√√CEIL(x)CEILING(x)大于等于x的最小整数CEIL(x)√CEILING(x)√CEIL(x)FLOOR(x)小于等于x的最大整数√√√√√MOD(x)x除以y的余数(x%y)√√x % y√x % yROUND(x,n)x四舍五入到n位小数√√√√√RANDOM(x)返回伪随机数(0~1区间)DBMS_RANDOMRAND()RAND()√√
随机计算
ORACLE的随机计算语法
SELECT DBMS_RANDOM.VALUE
FROM table_name
WHERE c1xxxx对Mysql/SQL Server数据库多次执行Random()获取到的随机数一般是不重复的; 可以通过入参指定种子来使多次执行获取同一随机数
SELECT RAND(1)
FROM table_name
WHERE c1xxxx对PostgreSQL数据库 可以通过SETSEED()函数指定种子来使多次执行获取同一随机数
SELECT SETSEED(0); --设置种子
SELECT RANDOM();统计聚合
1. COUNT()、SUM()、AVG()等聚合函数不会统计NULL的值
如果指定COUNT()内统计某个字段则不会统计此字段为NULL的数据 对AVG()来说NULL的忽略会作用在分母上使得总数量也变少如果要把NULL当零来处理需要用CASE进行转换
SELECT AVG(CASE WHEN score IS NULL THEN 0 ELSE score END)
FROM student2. 将统计出的结果拼接成一条数据返回
Oracle LISTADD
SELECT LISTADD(name, ,)
FROM student
WHERE score 80Mysql GROUP_CONCAT
SELECT GROUP_CONCAT(name ORDER BY name SEPARATOR ;)
FROM student
WHERE score 80Microsoft SQL Server STRING_ADD
SELECT STRING_ADD(name, ,) WITHIN GROUP (ORDER BY name)
FROM student
WHERE score 80PostgreSQL STRING_ADD
SELECT STRING_ADD(name, , ORDER BY name)
FROM student
WHERE score 80字符处理函数
函数功能OracleMysqlMicrosoft SQL ServerPostgreSQLSQLiteCHAR_LENGTH(s)字符串s包含的字符数量LENGTH(s)√LEN(s)√LENGTH(s)OCTET_LENGTH(s)字符串s包含的字节数量LENGTHB(s)√DATALENGTH(s)√×CONCAT(s1,s2,…)连接子字符串拼成更长的字符串√√√√连接运算符(双竖线)CONCAT_WS(spe, s1,s2,…)用spe连接各子字符串×√√√×INSTR(s, s1)s中首次出现s1的位置√√PATINDEX(s1, s)POSITION(s1 in s)√LOWER(s)s转小写字母√√√√√UPPER(s)s转大写字母√√√√√REPLACE(s, old, new)替换s中的字符串到新的字符串√√√√√SUBSTRING(s, n, m)截取s中n开始的m个字符SUBSTR(s, n, m)√√√√LEFT(s, n) RIGHT(s, n)返回开头或结尾n个字符×√√√×TRIM(s1 FROM s)删除字符串开头和结尾的子串√√√√TRIM(s, s1)
细节
Mysql的LENGTH(s), 返回的是字节数量; PostgreSQL的LENGTH(s), 返回的是字符数量Oracle 的CONCAT()一次只能连接两个字符串如果需要连接多个可以嵌套
SELECT CONCAT(CONCAT(S, Q), L)MYSQL、PostgreSQL、SQLite的SUBSTR(s, n, m)的起始位置n可以为负数表示从字符串结尾向前数n个位置此处为起始index再向后数m个字符串截取TRIM(s, s1)如省略s1则表示去除开头结尾的空格此外还有两个函数LTRIM(s)和RTRIM(s)可以分别去除开头及结尾的空格
NULL对字符函数的影响
Oracle/Microsoft SQL Server 及 PostgreSQL中CONCAT()函数将NULL空值当做空字符串’处理因此合并时会忽略Mysql中不会当做空字符串而是NULL与任何值合并后还是NULL因此最后结果为NULL 日期处理函数(变量)
函数功能OracleMysqlMicrosoft SQL ServerPostgreSQLSQLiteCURRENT_DATE当前日期√√GETDATE()√√CURRENT_TIME当前时间×√GETDATE()√√CURRENT_TIMESTAMP当前日期及时间√√√√√EXTRACT(p FROM dt)提取日期中的部分信息√√DATEPART(p, dt)√STRRFTIMEdt1-dt2计算两个日期之间的天数√DATEDIFF(dt2, dt1)DATEDIFF(p, dt1, dt2)√STRRFTIMEdt1-INTERVAL日期加上一个时间间隔√√DATEADD(p, n, dt)√STRRFTIME
以上部分为变量使用方式如下
SELECT CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP;提取日期
EXTRACT()用法
SELECT EXTRACT(YEAR FROM CURRENT_DATE);FROM前的关键字有YEAR、MONTH、DAY、HOUR、MINUTE、SECOND等 SQLite 的使用方式
SELECT STRFTIME(%Y, h_date);FROM前的关键字有%Y、%m、%d、%H、%M、%S等 日期加减计算
-- Oracle和PostgreSQL使用方式
SELECT DATE 2023-10-08 - DATE 2023-10-01, -- 两个时间的差值
DATE 2023-10-01 INTERVAL 3 DAY -- 日期加3天-- Mysql使用方式
SELECT DATEDIFF(2023-10-08, DATE 2023-10-01) , -- 两个时间的差值
DATE 2023-10-01 INTERVAL 3 MONTH; -- 日期加3个月-- SQL Server使用方式
SELECT DATEDIFF(DAY, 2023-10-08,2023-10-01) , -- 两个时间的差值
DATE DATEADD(MONTH, 1, 2023-10-01); -- 日期加1个月类型转换函数
CAST(expr AS type) 用于将数据转换为其他类型
SELECT CAST(123 AS INTEGER); -- 转换为数字123类型转换可能会导致精度丢失
-- 隐式类型转换
SELECT 234 123; -- 最后可能得到357条件表达式
CASE
功能 根据某个表达的执行结果匹配对应的值
语法
CASE expressionWHEN value1 THEN c1WHEN value2 THEN c2...ELSE default_value
END 具体例子
SELECT c1,CASE c2WHEN a THEN 1WHEN b THEN 2ELSE 0END
FROM table_name;还可用在WHERE、ORDER BY等子句中
SELECT c1,CASE c2WHEN a THEN 1WHEN b THEN 2ELSE 0END
FROM table_name
WHERE c1xxx
ORDER BY CASEWHEN c2 IS NULL THEN 0ESLE c2END;IF函数
MYSQL提供了一个IF(expr1, val1, val2)函数类似于java的 expr1?val1:val2三目表达式
IF(32, 32, 32)SQL Server、SQLite没有提供IF函数提供的是的IIF函数用法与Mysql的IF函数一样 空值处理
COALESCE函数
COALESCE(exp1, exp2, exp3, …)接收一个输入列表返回第一个非NULL的参数若都为空则返回NULL
SELECT COALESCE(yuwen_score, shuxue_score, yingyu_score)
FROM student可以用COALESCE将NULL转换为别的默认值类似于CASE WHEN
SELECT COALESCE(yuwen_score, 0) -- 若语文成绩为NULL 则记为0分
FROM student