房產(chǎn)備案登記信息查詢優(yōu)化大師網(wǎng)頁版
背景
最近開發(fā)的時(shí)候,有一個(gè)需求的查詢需要支持范圍查詢[a,b),并且查詢的結(jié)果要求查詢的范圍含頭端點(diǎn)不含尾端點(diǎn)。因?yàn)閎etween…and…查詢的范圍是含頭含尾的,因而不能使用。
因此打算直接使用>=和<來比較實(shí)現(xiàn),使用>=的時(shí)候沒有什么問題,結(jié)果在使用<的時(shí)候發(fā)現(xiàn)IDEA在報(bào)錯(cuò)。
查了一下發(fā)現(xiàn)是XML文件沒法區(qū)分<是小于號(hào)還是一個(gè)標(biāo)簽的開始。
解決方案
以在用戶表查詢用戶年齡范圍為例子。
方案一
這種語法沖突的,一般情況下都可以利用轉(zhuǎn)義字符來實(shí)現(xiàn),這里也有類似的用法。
轉(zhuǎn)移字符 | 實(shí)際含義 |
---|---|
< | < |
> | > |
可以寫作如下:
SELECT * FROM user WHEREage >= a AND age < b
方案二
當(dāng)然還可以使用 <![CDATA[ SQL語句 ]]>語法來實(shí)現(xiàn),在CDATA標(biāo)簽中間的SQL會(huì)被單純當(dāng)成SQL
例子:
<![CDATA[ SELECT * FROM user WHERE age >= a AND age < b ]]>
方案三
可以繼續(xù)使用between a and b,不過需要加多一個(gè)條件,xxx != b
例子:
SELECT * FROM user WHERE age BETWEEN a AND b AND age != b
方案四
可以把需要用到<的地方都轉(zhuǎn)換成使用>
例子:
SELECT * FROM user WHERE age >= a AND b > age