mysql学习教程,从入门到精通,SQL常用函数(40)

server/2024/12/22 11:07:22/

1、SQL常用函数

SQL(Structured Query Language)是一种用于管理和操作关系数据库的编程语言。SQL提供了许多内置函数,这些函数可以对数据库中的数据进行各种计算和操作。以下是一些常用的SQL函数,按功能分类:

1.1、字符串函数

  1. CONCAT():连接两个或多个字符串。

    sql">SELECT CONCAT('Hello', ' ', 'World') AS Greeting;
    
  2. SUBSTRING()SUBSTR():从字符串中提取子字符串。

    sql">SELECT SUBSTRING('Hello World', 1, 5) AS SubstringResult;
    
  3. LENGTH()LEN()(在某些数据库中):返回字符串的长度。

    sql">SELECT LENGTH('Hello World') AS StringLength;
    
  4. UPPER():将字符串转换为大写。

    sql">SELECT UPPER('hello') AS UppercaseString;
    
  5. LOWER():将字符串转换为小写。

    sql">SELECT LOWER('HELLO') AS LowercaseString;
    
  6. TRIM():去除字符串两端的空格或指定字符。

    sql">SELECT TRIM('   Hello World   ') AS TrimmedString;
    
  7. REPLACE():替换字符串中的子字符串。

    sql">SELECT REPLACE('Hello World', 'World', 'SQL') AS ReplacedString;
    

1.2、数值函数

  1. ABS():返回数值的绝对值。

    sql">SELECT ABS(-10) AS AbsoluteValue;
    
  2. CEILING()CEIL():返回大于或等于指定数值的最小整数。

    sql">SELECT CEILING(4.2) AS CeilingValue;
    
  3. FLOOR():返回小于或等于指定数值的最大整数。

    sql">SELECT FLOOR(4.8) AS FloorValue;
    
  4. ROUND():将数值四舍五入到指定的小数位数。

    sql">SELECT ROUND(4.567, 2) AS RoundedValue;
    
  5. MOD()%:返回两个数相除的余数。

    sql">SELECT MOD(10, 3) AS Remainder;
    
  6. POWER()POW():返回数值的指定幂。

    sql">SELECT POWER(2, 3) AS PowerValue;
    

1.3、日期和时间函数

  1. NOW():返回当前的日期和时间。

    sql">SELECT NOW() AS CurrentDateTime;
    
  2. CURDATE():返回当前的日期(不包含时间)。

    sql">SELECT CURDATE() AS CurrentDate;
    
  3. CURTIME():返回当前的时间(不包含日期)。

    sql">SELECT CURTIME() AS CurrentTime;
    
  4. DATE_ADD():向日期添加指定的时间间隔。

    sql">SELECT DATE_ADD('2023-01-01', INTERVAL 1 DAY) AS NewDate;
    
  5. DATEDIFF():返回两个日期之间的天数差。

    sql">SELECT DATEDIFF('2023-01-10', '2023-01-01') AS DaysDifference;
    
  6. YEAR()MONTH()DAY():从日期中提取年、月、日。

    sql">SELECT YEAR('2023-01-01') AS Year, MONTH('2023-01-01') AS Month, DAY('2023-01-01') AS Day;
    

1.4、聚合函数

  1. COUNT():返回匹配的行数。

    sql">SELECT COUNT(*) AS TotalRows FROM Employees;
    
  2. SUM():返回数值列的总和。

    sql">SELECT SUM(Salary) AS TotalSalary FROM Employees;
    
  3. AVG():返回数值列的平均值。

    sql">SELECT AVG(Salary) AS AverageSalary FROM Employees;
    
  4. MAX():返回数值列的最大值。

    sql">SELECT MAX(Salary) AS MaxSalary FROM Employees;
    
  5. MIN():返回数值列的最小值。

    sql">SELECT MIN(Salary) AS MinSalary FROM Employees;
    

1.5、条件函数

  1. IF():在SQL中实现简单的条件逻辑。

    sql">SELECT IF(Salary > 5000, 'High', 'Low') AS SalaryLevel FROM Employees;
    
  2. CASE:实现更复杂的条件逻辑。

    sql">SELECT CASE WHEN Salary > 10000 THEN 'Very High'WHEN Salary > 5000 THEN 'High'ELSE 'Low'END AS SalaryLevel 
    FROM Employees;
    

这些函数只是SQL中可用函数的一小部分。不同的数据库管理系统(如MySQL、PostgreSQL、SQL Server、Oracle等)可能提供额外的函数和特性。因此,建议查阅特定数据库的文档以获取更详细的信息和示例。

以下是一些具体的SQL函数使用案例,这些案例将进一步展示SQL中不同函数的应用。

1.6、字符串函数案例

  1. 查找子字符串位置
sql">SELECT CHARINDEX('world', 'Hello world, SQL!') AS position;

这个查询将返回子字符串’world’在字符串’Hello world, SQL!'中的位置,结果应该是7(因为’w’是第七个字符)。

  1. 字符串替换(带通配符)

假设我们有一个包含用户名的表users,其中有些用户名包含特定的数字序列,我们想要将这些数字序列替换为“NUMBER”。

sql">UPDATE users
SET username = REPLACE(username, '%[0-9]%', 'NUMBER')
WHERE username LIKE '%[0-9]%';

注意:这个查询在实际SQL中可能不会直接工作,因为REPLACE函数通常不支持正则表达式。这个案例是为了说明字符串替换的概念,并可能需要使用其他函数或存储过程来实现带有通配符的替换。不过,在某些SQL方言(如PostgreSQL)中,可以通过正则表达式函数来实现类似的功能。

  1. 字符串分割

虽然SQL标准没有直接的字符串分割函数,但我们可以使用其他函数和技巧来实现。例如,假设我们有一个包含逗号分隔值的字符串,我们想要将其分割成多个行。

sql">WITH SplitString AS (SELECT value = PARSENAME(REPLACE(STRING_AGG(SUBSTRING(t.csv, n, CHARINDEX(',', t.csv + ',', n) - n), ','), '.', ','), 1)FROM (SELECT csv,n = ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) - 1FROM (SELECT csv = 'a,b,c,d' -- 假设这是我们的逗号分隔字符串) tCROSS APPLY (SELECT TOP (LEN(t.csv) - LEN(REPLACE(t.csv, ',', '')) + 1) ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS nFROM sys.objects s1 -- 使用系统表来生成一个数字序列) nWHERE n <= LEN(t.csv) - LEN(REPLACE(t.csv, ',', ''))) tCROSS APPLY (SELECT value = SUBSTRING(',' + t.csv, n + 1, CHARINDEX(',', ',' + t.csv, n + 1) - n - 1)) vWHERE value <> ''
)
SELECT * FROM SplitString;

这个查询使用了STRING_AGG(在某些SQL版本中可能需要替换为其他字符串聚合函数)、SUBSTRINGCHARINDEXROW_NUMBER等函数和技巧来实现字符串分割。请注意,这个查询是为了演示目的而编写的,并且可能需要根据您的SQL版本和具体需求进行调整。

1.7、日期函数案例

  1. 计算两个日期之间的天数
sql">SELECT DATEDIFF(day, '2023-01-01', '2023-12-31') AS days_difference;

这个查询将计算两个日期之间的天数差,结果应该是364(或365,取决于是否是闰年)。

  1. 将日期转换为特定格式
sql">SELECT FORMAT(GETDATE(), 'yyyy-MM-dd HH:mm:ss') AS formatted_date;

这个查询将当前日期和时间转换为’yyyy-MM-dd HH:mm:ss’格式的字符串。请注意,FORMAT函数在某些SQL版本中可能不可用,您可能需要使用CONVERT或其他日期格式化函数。

  1. 计算日期的季度

虽然SQL标准没有直接的季度计算函数,但我们可以使用其他函数和技巧来实现。例如,在SQL Server中,我们可以使用DATEPART函数:

sql">SELECT DATEPART(quarter, GETDATE()) AS current_quarter;

这个查询将返回当前日期的季度(1到4)。

1.8、聚合函数案例

  1. 计算每个部门的平均工资
sql">SELECT department_id, AVG(salary) AS average_salary
FROM employees
GROUP BY department_id;

这个查询将按部门对员工进行分组,并计算每个部门的平均工资。

  1. 查找薪资最高的员工
sql">SELECT employee_id, first_name, last_name, salary
FROM employees
WHERE salary = (SELECT MAX(salary) FROM employees);

这个查询将返回薪资最高的员工的ID、名字、姓氏和薪资。

  1. 计算每个部门的员工数量,并按数量降序排列
sql">SELECT department_id, COUNT(*) AS number_of_employees
FROM employees
GROUP BY department_id
ORDER BY number_of_employees DESC;

这个查询将按部门对员工进行分组,计算每个部门的员工数量,并按数量降序排列结果。
这些案例进一步展示了SQL中不同函数的应用,并提供了更复杂的查询示例。请注意,根据您的SQL版本和具体需求,这些查询可能需要进行适当的调整。


http://www.ppmy.cn/server/132233.html

相关文章

数据同步工具Sqoop原理及场景优化

目录 0 数据同步策略 1 数据同步工具 ​编辑 2 Sqoop同步数据原理分析 2.1 原理分析 2.2 Sqoop基本使用分析 3 切片逻辑 3.1 MR切片逻辑 3.2 Hive CombineInputformat切片逻辑 3.3 实验1:Map任务并行度分析1 3.4 实验2: Map任务并行度分析2 3.5 实验3:Map任务并行…

Redis非关系型数据库操作命令大全

以下是 Redis 的常用操作命令大全&#xff0c;涵盖了键值操作、字符串、哈希、列表、集合、有序集合、发布/订阅、事务等多个方面的操作。 1. 通用键命令 命令说明SET key value设置指定 key 的值GET key获取指定 key 的值DEL key删除指定的 keyEXISTS key检查 key 是否存在E…

数据结构:用双栈实现一个队列

要用两个栈实现一个队列&#xff0c;可以利用“栈”的后进先出 (LIFO) 特性来模拟“队列”的先进先出 (FIFO) 操作。具体做法是使用两个栈&#xff1a;一个作为入栈栈&#xff0c;另一个作为出栈栈。 算法步骤 入队操作&#xff08;enqueue&#xff09;&#xff1a; 将元素压…

面试题:Redis(二)

1. 面试题 2. MoreKey案列 事故案例 2.1 生成上如何限制key*/flushdb/flushall等危险命令的使用&#xff1f; 通过redis.conf配置文件中在SECURITY选项中禁用这些命令 2.2 不用key*避免卡顿那用什么&#xff1f; 用scan命令&#xff0c;类似mysql中的limit命令 语法&…

RDD优化:缓存和checkpoint机制、数据共享(广播变量、累加器)、RDD的依赖关系、shuffle过程、并行度说明

文章目录 1. 缓存和checkpoint机制1.1 缓存使用1.2 checkpoint1.3 缓存和checkpoint的区别 2. 数据共享2.1 广播变量2.2 累加器 3. RDD依赖关系4.shuffle过程4.1 shuffle介绍4.2 spark计算要尽量避免shuffle 5. 并行度 1. 缓存和checkpoint机制 缓存和checkpoint也叫作rdd的持…

Tars RPC源码--C++客户端

Communicator: 客户端最重要的一个类&#xff0c;一个客户端只能生成一个Communicator类的实例&#xff0c;CommunicatorPtr& Application::getCommunicator(),获取线程安全的单例。 ServantProxy与ServantProxyFactory ServantProxy是服务代理&#xff0c;可以由Servan…

C/C++逆向:函数逆向分析-总体流程(整型指针)

函数的初始化 在逆向工程中&#xff0c;函数的初始化操作是函数在开始执行时&#xff0c;为正确运行而进行的准备工作。通常&#xff0c;这些操作发生在函数的序言&#xff08;Prologue&#xff09;阶段&#xff0c;具体的内容和顺序会因编译器、调用约定和目标平台&#xff0…

Golang | Leetcode Golang题解之第476题数字的补数

题目&#xff1a; 题解&#xff1a; func findComplement(num int) int {highBit : 0for i : 1; i < 30; i {if num < 1<<i {break}highBit i}mask : 1<<(highBit1) - 1return num ^ mask }