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

49 lines
5.5 KiB
Plaintext
Raw Normal View History

2026-09-21 19:03:31 +08:00
ó
�‡ªjBãóò•SrSSKJr SSKJrJr SSKJr SSKJr SSK J
r
SSK J r J
r
Jr SSKJr SS KJr SS
KJr SSS jjrSSS
jjrSSSjjrSSSjjrSSjrSSSjjrSSSjjrSSjrSSjrg ) uN通用工具:年龄表达å¼�ã€�类型转æ�¢ã€�日期解æž�ã€�分页计算。é)Ú annotations)ÚdateÚdatetime)ÚDecimal©Úceil)ÚAny)ÚIntegerÚfuncÚtext)Ú
ColumnElement)Ú dialect_name)Ú
BusinessErrorNcóT•U=(d
[5nUS:Xa\[R"[R"[R"55[R"U5-
S- [
5$[R "[S5U[R"55$)uÿ跨方言的"按当å‰�日期计算年龄"SQL 表达å¼�。
模型里�� age 字段:年龄是�时间漂移的派生值,�库第二天就会错。
统计接�需�按年龄筛选,所以这里给出能在 WHERE / GROUP BY 里用的表达�。
ÚsqlitegÔv@ÚYEAR) rr ÚcastÚ juliandayÚ current_dater
Ú
timestampdiffr Úcurdate)Úbirth_date_columnÚdialects Úapp\core\utils.pyÚage_expressionrsx€ð ×'œ›€GØ�(ÓÜ�yŠyÜ
�^Š^œD×-Ò-Ó/Ó
0´4·>²>ÐBSÓ3TÑ
TÐX^Ñ ^Ü ó
ð
ô
× Ò œd 6›lÐ,=¼t¿|º|»~Ó NÐNócóì•U=(d
[5nUS:XaF[R"[R"U5[R"U5-
[5$[R
"X5$)uÒ两个日期列相å‡�得到天数,跨方言。
MySQL 用 DATEDIFF(end, start);SQLite 用 julianday 差值�整。
就业时长(需求 2.6.3)用它直接在 SQL 里算,�用把整表拉到内存。
r)rr rrr
Údatediff)Ú
end_columnÚ start_columnrs rÚdate_diff_days_exprr!"sP€ð ×'œ›€GØ�(ÓÜ�yŠyœŸš¨
Ó3´d·n²nÀ\Ó6RÑRÔT[Ó\Ð\Ü �=Š=˜Ó 2Ð2rcóä•U(dgU=(d [R"5nURUR-
URUR4URUR4:-
$)u+Python 侧算年龄(列表出å�‚用)。N)rÚtodayÚyearÚmonthÚday)Úbirthr#s rÚcalc_ager(.sO€æ ØØ × !”T—Z’Z“\€EØ �:‰:˜Ÿ
™
Ñ " u§{¡{°E·I±IÐ&>À%Ç+Á+ÈuÏyÉyÐAYÑ&YÑ ZÐZrcór•U=(d [R"5n[URU-
SS5$)u`å�ªç»™äº†å¹´é¾„没有生日时的兜底推算(å�–当年æŸ�月 1 日,é�¿å…� 2/29 问题)。é)rr#r$)Úager#s rÚguess_birth_dater,6s*€à × !”T—Z’Z“\€EÜ �—
‘
˜SÑ  ! QÓ 'Ð'rcóŽ•Ucg[U[5(a [U5$[U5$![[4a gf=f©N)Ú
isinstancerÚfloatÚ TypeErrorÚ
ValueError)Úvalues rÚto_floatr4=sG€Ø �}ØÜ�%œ×!Ñ!Ü�U‹|ÐðÜ�U‹|ÐøÜ ”zÐ "óÙðús¦
1±AÁAcój•US;ag[U[5(aUR5$[U[5(aU$[U[5(a=SH7n[R"UR 5U5R5s $ [US35e![ a MVf=f)u;schema 层日期一律用 str,转 date 在这一层å�šã€‚)NÚÚnullN)z%Y-%m-%dz%Y/%m/%dz%Y.%m.%dz%Y%m%du#æ ¼å¼�ä¸�正确,应为 YYYY-MM-DD)r/rrÚstrÚstrptimeÚstripr2r)r3ÚfieldÚfmts rÚ
parse_dater=Hs¡€à Ð"Ó"ØÜ�%œ×"Ñ"Ø�z‰z‹|ÐÜ�%œ×ÑØˆ Ü�%œ×ÑÛAˆCð
Ü×(Ò(¨¯©«¸Ó<×AÑAÓCÒCñBô
˜5˜'Ð!DÐEÓ
FÐFøôó