簡體   English   中英

MySQL:在WHERE子句中使用的拆分字符串SQL

[英]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"為有效查詢,以便將分別考慮每個值14545452

感謝所有幫助。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM