Skip to content

SQLite - 表达式

表达式是一个或多个值、运算符和 SQL 函数的组合,最终解析为一个值。SQL 表达式是查询的基本组成部分,允许您直接在数据库中转换、计算和过滤数据。

表达式最常用于查询的 SELECT 列表和 WHERE 子句中。

SELECT expression_1, expression_2, ...
FROM table_name
WHERE filter_expression;

让我们探索不同类型的 SQLite 表达式。

布尔表达式的计算结果为 TRUE、FALSE 或 UNKNOWN。它们是 WHERE 子句的基石,用于根据条件过滤行。

考虑一个包含以下记录的 EMPLOYEES 表:

ID | NAME | AGE | DEPARTMENT | SALARY
---|-----------|-----|-------------|---------
1 | Alice | 32 | Engineering | 95000.0
2 | Bob | 25 | Marketing | 60000.0
3 | Charlie | 28 | Engineering | 85000.0
4 | David | 45 | Marketing | 72000.0
5 | Eve | 28 | Sales | 68000.0

此示例使用布尔表达式(SALARY > 70000)来仅获取薪水超过 70,000 美元的员工。

sqlite> SELECT name, department, salary FROM EMPLOYEES WHERE SALARY > 70000;
NAME | DEPARTMENT | SALARY
--------|-------------|---------
Alice | Engineering | 95000.0
Charlie | Engineering | 85000.0
David | Marketing | 72000.0

数值表达式执行数学计算。您可以直接在 SELECT 列表中使用它们,通常使用别名(AS)来提供可读的列名。

SELECT numerical_expression AS alias_name
[FROM table_name WHERE condition];

这是一个简单的示例:

sqlite> SELECT (20 * 5) + 10 AS result;
result
------
110

一个更实用的示例是计算每位员工的预计年度奖金。

sqlite> SELECT name, salary, salary * 0.1 AS bonus FROM EMPLOYEES;
NAME | SALARY | bonus
----------|---------|--------
Alice | 95000.0 | 9500.0
Bob | 60000.0 | 6000.0
Charlie | 85000.0 | 8500.0
David | 72000.0 | 7200.0
Eve | 68000.0 | 6800.0

SQLite 还包括聚合函数(aggregate functions),如 AVG()、SUM() 和 COUNT(),它们对多行执行计算。

sqlite> SELECT COUNT(*) AS total_employees, AVG(salary) AS average_salary FROM EMPLOYEES;
total_employees | average_salary
----------------|-----------------
5 | 76000.0

SQLite 提供了强大的函数来处理日期和时间。这些表达式可以返回当前时间戳(timestamp)或操作日期/时间值。

要获取当前时间戳:

sqlite> SELECT CURRENT_TIMESTAMP;
CURRENT_TIMESTAMP
-------------------
2023-10-27 14:50:15

strftime() 函数在格式化和计算日期方面非常通用。这里,我们计算从现在起 30 天后的日期。

sqlite> SELECT date('now', '+30 days');
date('now', '+30 days')
----------------------
2023-11-26