select *
from appointment
where status = ‘ACCEPTED’
and expire_time< now()
idea顯示now()這里一直報錯:
應為標記名稱
應為=
Deepseek:
根據您的代碼和報錯信息分析,這是一個 MyBatis XML 文件中的 SQL 語法問題。具體原因及解決方案如下:
-
XML 特殊字符問題
< now()
中的小于號<
是 XML 保留字符,必須轉義為<
,建議將條件改為:expire_time < now()
-
數據庫函數兼容性建議
若使用 MySQL 數據庫,推薦改用CURRENT_TIMESTAMP
替代now()
(功能相同但更符合 SQL 標準):expire_time < CURRENT_TIMESTAMP
-
CDATA 區塊方案
對于含特殊字符的 SQL 片段,可用 CDATA 包裹避免轉義:<![CDATA[ expire_time < CURRENT_TIMESTAMP ]]>
-
完整修正示例
<select id="getTimeoutAppointments" resultType="cn.edu.hactcm.vitallink.entity.user.Appointment">SELECT * FROM appointment WHERE status = 'ACCEPTED' AND expire_time < CURRENT_TIMESTAMP </select>
補充說明:若使用 Oracle 數據庫需改用 SYSDATE
,PostgreSQL 建議使用 CURRENT_TIMESTAMP
。建議檢查數據庫類型并統一時間函數的使用規范。