这份文档专为会计和财务人员整理,涵盖了在 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. 财务数据处理最佳实践

    1. 日期存储格式:强烈建议将日期和时间存储为标准的 ISO-8601 文本格式(YYYY-MM-DD 或 YYYY-MM-DD HH:MM:SS),以确保所有日期函数都能正确解析和计算。
    1. 时区处理:SQLite 默认使用 UTC 时间。如果业务发生在中国,获取当前时间时务必加上 'localtime' 修饰符,例如 DATETIME('now', 'localtime'),以避免跨时区记账错误。
    1. 金额精度:在进行财务计算时,始终使用 ROUND() 函数控制小数位数,避免因浮点数运算导致的"一分钱"尾差。