数据库常用函数
时间: 2025-04-23 22:33:57 浏览: 16
<think>好的,用户想了解常用数据库函数及其实现示例。首先,我需要回忆一下常见的聚合函数,比如SUM、AVG、MAX、MIN、COUNT,这些几乎是所有数据库都支持的。然后,字符串函数也很重要,比如CONCAT、SUBSTRING、LENGTH、REPLACE、TRIM,不同的数据库可能有不同的函数名,比如Oracle的SUBSTR和MySQL的SUBSTRING。接下来是日期函数,比如获取当前日期、日期加减、提取日期部分,不同数据库的语法差异较大,比如MySQL用DATE_ADD,而Oracle用ADD_MONTHS。还有类型转换函数,如CAST和CONVERT,以及条件函数如CASE WHEN和COALESCE。另外,窗口函数比如ROW_NUMBER、RANK、DENSE_RANK在分析数据时很有用,但可能有些数据库不支持或者语法不同。需要参考用户提供的引用内容,比如引用4提到了聚合函数,引用2提到了分析函数,引用5提到了LOCATE函数。要注意不同数据库的实现差异,比如达梦的LOCATE对应MySQL的INSTR或LOCATE,Oracle的INSTR。还要给出具体的示例,帮助用户理解用法。可能需要分门别类,把函数分为聚合、字符串、日期、转换、条件、窗口等类别,每个类别列举常用函数,并给出不同数据库的示例,比如MySQL、Oracle、PostgreSQL等。最后,生成相关问题,引导用户深入思考。需要确保LaTeX格式正确,行内公式用$...$,独立公式用$$...$$。同时检查引用标记是否正确添加,比如引用[^1]到[^5]。可能还需要注意用户提到的“常用”函数,避免过于冷门的函数,保持回答的实用性。</think>### 常用数据库函数分类及实现示例
#### 一、聚合函数
1. **统计类**
- `SUM()`:计算数值列总和
```sql
-- MySQL/Oracle/H2
SELECT SUM(salary) FROM employees;
```
- `AVG()`:计算数值列平均值
$$ \text{平均工资} = \frac{\sum \text{salary}}{n} $$
```sql
-- Greenplum/达梦
SELECT AVG(price) FROM products;
```
- `COUNT()`:统计行数
```sql
-- 所有数据库通用
SELECT COUNT(*) FROM orders WHERE status='completed';
```
2. **极值类**
- `MAX()/MIN()`:获取最大/最小值
```sql
-- Oracle/MySQL
SELECT MAX(temperature), MIN(humidity) FROM sensor_data;
```
3. **方差与标准差** [^2][^4]
- `STDDEV()`:计算样本标准差
- `VAR_POP()`:计算总体方差
```sql
-- Greenplum示例
SELECT STDDEV(sales), VAR_POP(profit) FROM financial_report;
```
---
#### 二、字符串函数
1. **拼接与截取**
- `CONCAT(str1, str2)`:字符串拼接
```sql
-- MySQL/H2
SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM users;
```
- `SUBSTRING(str, start, length)`:截取子串
```sql
-- Oracle使用SUBSTR
SELECT SUBSTR('Hello World', 7, 5) FROM dual; -- 返回"World"
```
2. **定位与替换**
- `LOCATE(substr, str)` / `INSTR(str, substr)`:查找子串位置 [^5]
```sql
-- 达梦示例
SELECT LOCATE('DB', 'LearnDB') AS pos; -- 返回6
```
- `REPLACE(str, old, new)`:字符串替换
```sql
-- PostgreSQL示例
SELECT REPLACE('2023-01-01', '-', '/'); -- 返回"2023/01/01"
```
---
#### 三、日期函数
1. **时间计算**
- `CURRENT_DATE` / `NOW()`:获取当前日期
```sql
-- MySQL获取6个月后的日期 [^1]
SELECT DATE_ADD(CURRENT_DATE, INTERVAL 6 MONTH) AS future_date;
```
- `DATEDIFF(end, start)`:计算日期差
```sql
-- H2示例
SELECT DATEDIFF('day', '2023-01-01', '2023-02-01'); -- 返回31
```
2. **日期提取**
- `EXTRACT(YEAR FROM date)`:提取年份
```sql
-- PostgreSQL/Oracle
SELECT EXTRACT(YEAR FROM order_date) FROM orders;
```
---
#### 四、类型转换函数
1. `CAST(value AS type)`
```sql
-- 将字符串转为数值(通用语法)
SELECT CAST('123' AS INT) + 5; -- 返回128
```
2. `TO_DATE(str, format)`
```sql
-- Oracle示例
SELECT TO_DATE('2023-12-25', 'YYYY-MM-DD') FROM dual;
```
---
#### 五、条件函数
1. `CASE WHEN`
```sql
-- 分类价格层级
SELECT product_name,
CASE WHEN price > 100 THEN '高价'
WHEN price > 50 THEN '中价'
ELSE '低价' END AS price_level
FROM products;
```
2. `COALESCE()`:返回第一个非NULL值
```sql
-- 替换NULL为默认值
SELECT COALESCE(email, '未填写') FROM customers;
```
---
#### 六、窗口函数
1. `ROW_NUMBER()`:生成行号
```sql
-- 按销售额排名
SELECT salesperson,
ROW_NUMBER() OVER (ORDER BY sales DESC) AS rank
FROM sales_data;
```
2. `FIRST_VALUE()/LAST_VALUE()`:获取首尾值 [^2]
```sql
-- Greenplum示例
SELECT date,
FIRST_VALUE(price) OVER (PARTITION BY product_id ORDER BY date) AS first_price
FROM price_history;
```
---
阅读全文
相关推荐









