Files
test/app/core/__pycache__/utils.cpython-311.pyc
T

45 lines
6.1 KiB
Plaintext
Raw Normal View History

2026-09-21 19:03:31 +08:00
§
�‡ªjBãóÖ—dZddlmZddlmZmZddlmZddlmZddl m
Z
ddl m Z m
Z
mZddlmZdd lmZdd
lmZd,d-d„Zd,d-d„Zd,d.d„Zd,d/d„Zd0d„Zd1d2d"„Zd3d4d%„Zd5d(„Zd6d+„Zd S)7uN通用工具:年龄表达å¼�ã€�类型转æ�¢ã€�日期解æž�ã€�分页计算。é)Ú annotations)ÚdateÚdatetime)ÚDecimal©Úceil)ÚAny)ÚIntegerÚfuncÚtext)Ú
ColumnElement)Ú dialect_name)Ú
BusinessErrorNÚdialectú
str | NoneÚreturnr
có@—|p
t¦«}|dkrUtjtjtj¦«¦«tj|¦«z
dz t
¦«Stjtd¦«|tj¦«¦«S)u 跨方言的"按当å‰�日期计算年龄"SQL 表达å¼�。
模型里�� age 字段:年龄是�时间漂移的派生值,�库第二天就会错。
统计接�需�按年龄筛选,所以这里给出能在 WHERE / GROUP BY 里用的表达�。
ÚsqlitegÔv@ÚYEAR) rr ÚcastÚ juliandayÚ current_dater
Ú
timestampdiffr Úcurdate)Úbirth_date_columnrs ú&D:\xwt0803\wolin_sms\app\core\utils.pyÚage_expressionrs„€ð Ð'�™œ€GØ�(ÒÐÝŒyÝ
Œ^�DÔ-Ñ/Ô/Ñ
0Ô
0µ4´>ÐBSÑ3TÔ3TÑ
TÐX^Ñ ^Ý ñ
ô
ð
õ
Ô �d 6™lœlÐ,=½t¼|¹~¼~Ñ NÔ NÐNócóÚ—|p
t¦«}|dkrAtjtj|¦«tj|¦«z
t¦«Stj||¦«S)uÞ两个日期列相å‡�得到天数,跨方言。
MySQL 用 DATEDIFF(end, start);SQLite 用 julianday 差值�整。
就业时长(需求 2.6.3)用它直接在 SQL 里算,�用把整表拉到内存。
r)rr rrr
Údatediff)Ú
end_columnÚ start_columnrs rÚdate_diff_days_exprr#"s[€ð Ð'�™œ€GØ�(ÒÐÝŒy�œ¨
Ñ3Ô3µd´nÀ\Ñ6RÔ6RÑRÕT[Ñ\Ô\Ð\Ý Œ=˜ \Ñ 2Ô 2Ð2rÚbirthú date | NoneÚtodayú
int | Nonecó�—|sdS|ptj¦«}|j|jz
|j|jf|j|jfkz
S)u+Python 侧算年龄(列表出å�‚用)。N)rr&ÚyearÚmonthÚday)r$r&s rÚcalc_ager,.sJ€à ð؈tØ Ð !•T”Z‘\”\€EØ Œ:˜œ
Ñ " u¤{°E´IÐ&>À%Ä+ÈuÌyÐAYÒ&YÑ ZÐZrÚageÚintrcó^—|ptj¦«}t|j|z
dd¦«S)u`å�ªç»™äº†å¹´é¾„没有生日时的兜底推算(å�–当年æŸ�月 1 日,é�¿å…� 2/29 问题)。é)rr&r))r-r&s rÚguess_birth_dater16s+€à Ð !•T”Z‘\”\€EÝ �”
˜SÑ  ! QÑ 'Ô 'Ð'rÚvaluer ú float | Nonecó¢—|€dSt|t¦«rt|¦«S t|¦«S#ttf$rYdSwxYw©N)Ú
isinstancerÚfloatÚ TypeErrorÚ
ValueError)r2s rÚto_floatr:=sb€Ø €}؈tÝ�%�Ñ!Ô!ðÝ�U‰|Œ|ÐðÝ�U‰|Œ|ÐøÝ •zÐ "ððð؈tˆtðøøøsª9¹AÁ