group: 開發者文件 order: 20
部分日期欄位的設計規範
適用情境:資料集中有日期欄位,但部分紀錄只記錄到年份(月、日不詳),無法形成完整日期。
問題說明
某些歷史或行政資料中,日期精確度不一致。例如候選人生日欄位:
- 早期紀錄可能只記錄年份:
1947-00-00(00代表不詳) - 近期紀錄有完整日期:
1972-03-15
YYYY-00-00 不是合法的日期格式,無法直接存為 date 型別,但若全部改為純文字,又會失去排序與範圍篩選能力。
歐噴資料庫的標準處理方式
對於此類「部分日期」欄位,使用以下雙欄位設計:
欄位設計
| 欄位名 | 型別 | 說明 |
|---|---|---|
{欄位名} |
keyword |
原始值,保留來源格式(如 "1947-00-00") |
{欄位名}.日期 |
date |
補齊後的日期,僅供排序與範圍查詢 |
補齊規則
- 只知道年份(月、日為
00)→ 補齊為該年 1 月 1 日(1947-01-01) - 只知道年月(日為
00)→ 補齊為該月 1 日(1947-03-01) - 完整日期 → 原樣填入(
1947-03-15)
{欄位名}.日期 欄位永遠有值,不會為空,確保排序不中斷。
使用限制與注意事項
⚠️ -01-01 不代表真正的 1 月 1 日
{欄位名}.日期 結尾為 -01-01 的紀錄,不保證該實體確實在 1 月 1 日出生(或發生)。這個值可能是「只知道年份」的補齊結果。
確認實際精確度請查閱原始欄位 {欄位名}:
"1947-00-00"→ 只知道年份,月日不詳"1947-03-00"→ 只知道年月,日不詳"1947-03-15"→ 完整日期,可信
建議用法
| 需求 | 使用欄位 | 備注 |
|---|---|---|
| 依出生年份排序 | {欄位名}.日期 |
安全,覆蓋率 100% |
| 年份範圍篩選(如 1940–1960 年間) | {欄位名}.日期 |
安全 |
| 確認確切日期 | {欄位名}(原始值) |
必看,避免誤讀 |
| 精確日篩選(如找 1 月 1 日生者) | ❌ 不建議 | -01-01 含補齊值,會有假陽性 |
AI Agent 使用指引
若你正在查詢含有此設計的資料集,請遵守以下原則:
-
展示日期給使用者前,先確認原始欄位是否為完整日期。若
{欄位名}為1947-00-00,應說明「生日記錄至年份,月日不詳」,而非直接顯示1947-01-01。 -
不要用
{欄位名}.日期做精確到月日的等值篩選(=1947-01-01)。這樣的查詢會把「年份不詳月日」的紀錄一起撈出來,造成誤判。 -
排序與年份範圍篩選是
{欄位名}.日期的正確用途。
採用此設計的資料集
| 資料集 | 欄位 | 說明 |
|---|---|---|
| (待各資料集建立後補充) |