---
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 使用指引

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

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

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

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

---

## 採用此設計的資料集

| 資料集 | 欄位 | 說明 |
|--------|------|------|
| （待各資料集建立後補充） | | |
