在 SQL 查詢中直接用 `CONVERT` 將 `datetime`/`smalldatetime`/`date`/`datetime2` 轉為指定格式字符串,避免 PHP 層二次處理,效率最高。
| 代碼 | 輸出格式示例 | 說明 |
|---|---|---|
| 120 | 2024-12-25 14:30:00 | ODBC 標準 (yyyy-mm-dd hh:mi:ss) **最推薦** |
| 121 | 2024-12-25 14:30:00.000 | 含毫秒 (yyyy-mm-dd hh:mi:ss.mmm) |
| 126 | 2024-12-25T14:30:00.000 | ISO 8601 (含毫秒,適合 JSON/API) |
| 112 | 20241225 | 純數字日期 (yyyymmdd) |
| 23 | 2024-12-25 | ISO 日期 (yyyy-mm-dd) |
| 108 | 14:30:00 | 僅時間 (hh:mi:ss) |
| 109 | Dec 25 2024 2:30PM | 英文月份+12小時制 |
| 110 | 12-25-2024 | 美式 mm-dd-yyyy |
| 111 | 2024/12/25 | yyyy/mm/dd |
| 20 | 2024-12-25 14:30:00 | 同 120 (舊版別名) |
| 21 | 2024-12-25 14:30:00.000 | 同 121 (舊版別名) |
完整列表請參考 Microsoft 官方文檔,以上覆蓋 95% 業務場景。
-- 1. 標準日期時間 (最常用)
SELECT CONVERT(varchar, CreatedAt, 120) AS CreatedAtStr FROM Orders;
-- 2. 僅日期 (報表分組)
SELECT CONVERT(varchar, CreatedAt, 23) AS DateOnly, COUNT(*) FROM Orders GROUP BY CONVERT(varchar, CreatedAt, 23);
-- 3. API 返回 ISO 8601 (前端直接 new Date())
SELECT CONVERT(varchar, UpdatedAt, 126) AS UpdatedAtISO FROM Products;
-- 4. 自定義格式 (SQL Server 2012+ FORMAT 函數,更靈活但較慢)
SELECT FORMAT(CreatedAt, 'yyyy年MM月dd日 HH:mm', 'zh-TW') AS CustomFormat FROM Logs;
$stmt = $pdo->query("SELECT CONVERT(varchar, CreatedAt, 120) AS CreatedAt FROM Orders");
while ($row = $stmt->fetch()) {
echo $row['CreatedAt']; // 直接輸出 '2024-12-25 14:30:00'
}
$stmt = $pdo->query("SELECT CreatedAt FROM Orders");
$stmt->setFetchMode(PDO::FETCH_ASSOC);
while ($row = $stmt->fetch()) {
// $row['CreatedAt'] 是 DateTime 對象 (PDO SQLSRV/ODBC 驅動行為不一,建議測試)
if ($row['CreatedAt'] instanceof DateTime) {
echo $row['CreatedAt']->format('Y-m-d H:i:s');
} else {
// 某些驅動返回字符串
echo $row['CreatedAt'];
}
}
$raw = 'Dec 25 2024 2:30PM'; // 風格 109
$ts = strtotime($raw);
echo date('Y-m-d H:i:s', $ts); // 2024-12-25 14:30:00
// 或用 DateTime
$dt = DateTime::createFromFormat('M d Y h:iA', $raw);
echo $dt->format('Y-m-d H:i:s');
| 驅動 | 返回類型 | 建議 |
|---|---|---|
| sqlsrv (Microsoft 官方) | DateTime 對象 | 直接 `->format()`,最優 |
| pdo_sqlsrv | DateTime 對象 | 同上 |
| odbc / pdo_odbc | 字符串 (視 ODBC 設置) | SQL 用 CONVERT 固定格式 |
| mssql (已棄用 PHP 7+) | 字符串 | 升級驅動 |
| dblib (FreeTDS) | 字符串 | SQL 用 CONVERT 固定格式 |