选择所有字段的值,其中所有字段的值都像一些字符串

问题描述:

有人可以帮助,我需要从所有字段的值都像%someString%的字段中获取所有值。我的表有17个字段,我不想在查询中写入所有字段。 DB Mysql。就可以实现,这将是以下选择所有字段的值,其中所有字段的值都像一些字符串

select * from Deputes_APPEAL where filePath, checkForPlagiarism, contentOfResolution, countOfPages, dateForCheck, incomeNumber, incomingDate, mainWorker, nameAndAddressOfApplicant, nameOfDepute, outDate, outNumber, result, secondaryWorkers, shortContentOfAppeal, statusOfWorking, themeOfAppeal, TypeOfDeputeAppeal, unitWhoDoResolution like %someString% 
+0

在查询中写入17个字段的时间要比发布此问题的时间少。也许是 –

+0

,但这不正确? –

+0

发布你的表结构,并且还提到你想从'LIKE'子句中忽略哪些字段。 – 1000111

方式一:

SELECT 
CONCAT('SELECT * FROM Deputes_APPEAL WHERE ',GROUP_CONCAT(COLUMN_NAME SEPARATOR ' LIKE \'%something%\' OR '),' LIKE \'%something%\'') 
FROM information_schema.COLUMNS 
WHERE TABLE_SCHEMA = 'YOUR_DATABASE_NAME' 
AND TABLE_NAME = 'YOUR_TABLE_NAME' 
AND COLUMN_NAME NOT IN ('Column1','Column2',....); 

注:你需要把NOT IN条款那些你想在LIKE表达省略内列名。

输出:通过运行上面的查询,你会得到一个输出象下面这样:

SELECT * FROM Deputes_APPEAL WHERE column_name1 LIKE '%something%' OR .......

现在抢这个查询并运行。

只使用循环构建SQL - 超级简单。

final String[] properties = new String[] { /* all your fields here */ }; 

// build the SQL 
StringBuilder sb = new StringBuilder(); 
sb.append("SELECT o FROM YourEntity o "); 
if (properties.length > 0) { 
    sb.append("WHERE (").append(properties[0]).append("LIKE :v0"); 
    for (int i = 1; i < properties.length; ++i) { 
    sb.append(" OR ").append(properties[i]).append("LIKE :v").append(i); 
    } 
    sb.append(") "); 
} 

// build the query. 
Query query = session.createQuery(sb.toString()); 
for (int i = 0; i < properties.length; ++i) { 
    query.setParameter("v" + i, "%something%"); 
}