group: 開發者文件 order: 20

部分日期欄位的設計規範

適用情境:資料集中有日期欄位,但部分紀錄只記錄到年份(月、日不詳),無法形成完整日期。


問題說明

某些歷史或行政資料中,日期精確度不一致。例如候選人生日欄位:

  • 早期紀錄可能只記錄年份:1947-00-0000 代表不詳)
  • 近期紀錄有完整日期: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 使用指引

若你正在查詢含有此設計的資料集,請遵守以下原則:

  1. 展示日期給使用者前,先確認原始欄位是否為完整日期。若 {欄位名}1947-00-00,應說明「生日記錄至年份,月日不詳」,而非直接顯示 1947-01-01

  2. 不要用 {欄位名}.日期 做精確到月日的等值篩選=1947-01-01)。這樣的查詢會把「年份不詳月日」的紀錄一起撈出來,造成誤判。

  3. 排序與年份範圍篩選{欄位名}.日期 的正確用途。


採用此設計的資料集

資料集 欄位 說明
(待各資料集建立後補充)

📄 查看原始 Markdown