MYSQL中小於號報錯,以及between and 無法使用
之前一直用的oracle,今天開始用mySql,發現在寫sql時,由於寫了子查詢 0 < (select count(*) from A where A.del='0' and A.xxx='xxx')時,sql報錯缺少表示式和識別符號號啥的,最終發現是 在xml時,有時相關符號變成綠色啥的,是需要轉義的寫法的,eg:< 對應 < 注:在XML中<號,& 是非法的,要轉義。當然其他符號也儘量轉義
其次之前用Oracle 時,一直用between and 比較日期是否在某個時間範圍內,eg:
<if test="cykssj!=null and cyjssj != null">
AND A.cysj BETWEEN to_date(#{cykssj},'yyyy-mm-dd') AND to_date(#{cyjssj},'yyyy-mm-dd')
</if>
還有一種to_char的用法,在mysql中莫名的報錯,報to_date或者to_char不存在,用<= >=同樣不管用。
後來嘗試了多種辦法,最終用了一個<![CDATA[ xxxxxxxxxxxxxxxxxxx ]]>
術語 CDATA 指的是不應由 XML 解析器進行解析的文字資料(Unparsed Character Data)。
在 XML 元素中,"<" 和 "&" 是非法的。
"<" 會產生錯誤,因為解析器會把該字元解釋為新元素的開始。
"&" 也會產生錯誤,因為解析器會把該字元解釋為字元實體的開始。
某些文字,比如 JavaScript 程式碼,包含大量 "<" 或 "&" 字元。為了避免錯誤,可以將指令碼程式碼定義為 CDATA。
CDATA 部分中的所有內容都會被解析器忽略。
CDATA 部分由 "<![CDATA[" 開始,由 "]]>" 結束:
關於 CDATA 部分的註釋:
CDATA 部分不能包含字串 "]]>"。也不允許巢狀的 CDATA 部分。
標記 CDATA 部分結尾的 "]]>" 不能包含空格或折行。