[英]MySQL: Split string SQL to be used in WHERE clause
我正在尋找一種在JasperReport中使用IN關鍵字的方法。 我的查詢看起來像:
SELECT * FROM table_name WHERE CID IN (145,45, 452);
在賈斯珀報告中,我可以設置它;
SELECT * FROM table_name WHERE CID IN ($P{MY_CIDS});
然后從我的Java發送$P{MY_CIDS}
作為String
,所以查詢看起來像
SELECT * FROM table_name WHERE CID IN ("145,45, 452");
我的問題是如何在SQL變換"145,45, 452"
為有效查詢,以便將分別考慮每個值145
, 45
, 452
感謝所有幫助。
WHERE FIND_IN_SET(CID, "145,45,452")
但是此查詢將始終導致表全掃描。 因此,我建議您重寫代碼並使用適當的IN (A, B, C)
語法。
您有兩個選擇。 更常見的是改寫這樣的查詢:
SELECT * FROM table_name WHERE CID IN (?, ?, ?, ..., ?);
我不確定另一個對MySQL是否有效,但是它在PostgreSQL中可以正常工作。 它是使用不可變的函數將字符串解析為一組整數,而是使用:
SELECT * FROM table_name WHERE CID IN (split_to_int(?));
SELECT * FROM table_name WHERE CID IN ($P!{MY_CIDS});
只需使用
$P!{MY_CIDS}
($ P和{MY_CIDS}之間的感嘆號 )。
現在,Jasper將使Strings變得像這樣:
"SELECT * FROM table_name WHERE CID IN ("
+"145,45,452"
+")";
導致:
SELECT * FROM table_name WHERE CID IN (145,45,452);
花了我很長時間才能得到它,但現在它對我有用。”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.