这份文档专为会计和财务人员整理,涵盖了在 SQLite 数据库中进行财务数据处理时最常用的文本、日期时间、数值处理函数及关键语法。
1. 文本处理函数 (Text Functions)
在会计工作中,文本函数常用于清洗和格式化科目名称、客户/供应商名称、凭证摘要等数据。
-
UPPER(X):将字符串转换为大写。常用于统一科目名称格式。 -
示例:
SELECT UPPER('cash')返回CASH。 -
LOWER(X):将字符串转换为小写。 -
示例:
SELECT LOWER('ACCOUNTS RECEIVABLE')返回accounts receivable。 -
LENGTH(X):返回字符串的字符长度。可用于检查凭证编号或发票号是否符合规定长度。 -
示例:
SELECT LENGTH('INV-2024-001')返回12。 -
SUBSTR(X, Y, Z):提取子字符串。从第 Y 个字符开始,截取 Z 个字符。常用于从长字符串中提取凭证日期或编号。 -
示例:
SELECT SUBSTR('2024-05-20-PAY-001', 1, 10)返回2024-05-20。 -
REPLACE(X, Y, Z):替换字符串中的特定字符。 -
示例:
SELECT REPLACE('USD 1,000.00', ',', '')返回USD 1000.00。
2. 日期和时间处理函数 (Date and Time Functions)
会计周期核算、账龄分析、折旧计算等都离不开日期函数。SQLite 的日期函数接受时间字符串(如 'now' 或 '2024-05-20')及修改器(如 '+1 day')。
强烈建议将日期和时间存储为标准的 ISO-8601 文本格式(YYYY-MM-DD 或 YYYY-MM-DD HH:MM:SS),以确保所有日期函数都能正确解析和计算。
-
DATE(timestring, modifier, ...):返回YYYY-MM-DD格式的日期。 -
获取当前日期:
SELECT DATE('now'); -
计算30天后日期:
SELECT DATE('now', '+30 days'); -
获取上月第一天:
SELECT DATE('now', 'start of month', '-1 month'); -
DATETIME(timestring, modifier, ...):返回YYYY-MM-DD HH:MM:SS格式的日期时间。 -
获取本地当前时间:
SELECT DATETIME('now', 'localtime'); -
STRFTIME(format, timestring, modifier, ...):最强大的日期格式化函数,可按指定格式输出。 -
提取年份:
SELECT STRFTIME('%Y', 'now'); -
转换为UNIX时间戳(秒):
SELECT STRFTIME('%s', 'now');常用于精确计算时间差。 -
JULIANDAY(timestring, modifier, ...):返回儒略日数(浮点数)。 -
计算两个日期之间的天数:
SELECT JULIANDAY('2024-05-20') - JULIANDAY('2024-05-01');返回19.0。
3. 数值处理函数 (Math Functions)
用于财务计算、金额四舍五入、处理借贷差额等。
-
ABS(X):返回绝对值。常用于处理借贷方金额,确保差额为正数。 -
示例:
SELECT ABS(-1500.50)返回1500.5。 -
ROUND(X, Y):四舍五入到 Y 位小数。会计金额处理必备。 -
示例:
SELECT ROUND(1234.567, 2)返回1234.57。 -
RANDOM():生成一个伪随机整数。可用于生成测试数据或随机抽样审计。 -
示例:
SELECT ABS(RANDOM() % 10000) / 100.0;生成0-99.99的随机金额。
4. 聚合函数 (Aggregate Functions)
财务报表生成的核心函数,用于汇总数据。
-
SUM(X):求和。计算总账、明细账金额。 -
AVG(X):求平均值。计算平均客单价、平均成本等。 -
COUNT(X)/COUNT(*):计数。统计凭证数量、交易笔数。 -
MAX(X)/MIN(X):求最大/最小值。找出最大单笔支出、最早交易日期等。
5. 关键语法与逻辑控制
CASE WHEN ... THEN ... ELSE ... END:条件判断。在生成利润表或资产负债表时,根据科目类型或借贷方向分类汇总。
SELECT
account_name,
CASE
WHEN balance > 0 THEN ‘Debit’
WHEN balance < 0 THEN ‘Credit’
ELSE ‘Zero’
END AS balance_type
FROM ledger;
-
COALESCE(X, Y, ...):返回第一个非 NULL 的值。处理缺失的财务数据或默认值。 -
示例:
SELECT COALESCE(discount_amount, 0) FROM invoices;若无折扣则返回0。 -
字符串拼接
||:将多个字段或文本连接起来。 -
示例:
SELECT '凭证号: ' || voucher_no || ' 日期: ' || trans_date FROM vouchers;
6. 财务数据处理最佳实践
-
- 日期存储格式:强烈建议将日期和时间存储为标准的 ISO-8601 文本格式(
YYYY-MM-DD或YYYY-MM-DD HH:MM:SS),以确保所有日期函数都能正确解析和计算。
- 日期存储格式:强烈建议将日期和时间存储为标准的 ISO-8601 文本格式(
-
- 时区处理:SQLite 默认使用 UTC 时间。如果业务发生在中国,获取当前时间时务必加上
'localtime'修饰符,例如DATETIME('now', 'localtime'),以避免跨时区记账错误。
- 时区处理:SQLite 默认使用 UTC 时间。如果业务发生在中国,获取当前时间时务必加上
-
- 金额精度:在进行财务计算时,始终使用
ROUND()函数控制小数位数,避免因浮点数运算导致的"一分钱"尾差。
- 金额精度:在进行财务计算时,始终使用