选择所有字段的值,其中所有字段的值都像一些字符串
问题描述:
有人可以帮助,我需要从所有字段的值都像%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%
答
方式一:
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%");
}
在查询中写入17个字段的时间要比发布此问题的时间少。也许是 –
,但这不正确? –
发布你的表结构,并且还提到你想从'LIKE'子句中忽略哪些字段。 – 1000111