首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Oracle SQL 格式化時間後排序:ORDER BY 直接用 TO_DATE,SELECT 列表用 * 會報 ORA-00923

     編輯:程式設計綜合問答

錯誤:`select *, TO_DATE(...) as dt ... ORDER BY dt` → `ORA-00923: FROM keyword not found`。Oracle 不支援 `SELECT *, expr`。

正確寫法

-- 方式一:ORDER BY 直接用表達式,SELECT 只列需要的列
SELECT col1, col2, TO_DATE(as_auctiontime, 'YYYY-MM-DD HH24:MI:SS') AS auction_time
FROM PM_ANNOUNCEMENTSUBJECTINFO
ORDER BY auction_time;

-- 方式二:子查詢/包裝查詢保留 *
SELECT * FROM (
    SELECT t.*, TO_DATE(as_auctiontime, 'YYYY-MM-DD HH24:MI:SS') AS auction_time
    FROM PM_ANNOUNCEMENTSUBJECTINFO t
) ORDER BY auction_time;

為什麼 `SELECT *` 加表達式報錯?

Oracle 語法規定 `SELECT` 後若出現 `*`,則 `*` 必須是**唯一**選擇項,不能與其他表達式混用。MySQL/PostgreSQL/SQL Server 允許混用,Oracle 不允許。

最佳實踐

  • 生產代碼**避免 `SELECT *`**,顯式列出所需列,利於計劃穩定、減少網絡傳輸、避免表結構變更衝擊。
  • 排序欄位若為字符串存儲的日期,**必須在 ORDER BY 中轉型**,否則按字典序排(`1.8` > `1.18`)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved