SELECT * FROM docimagefile WHERE SUBSTRING_INDEX(imagefilename, '.', -1) IN ('pdf', 'doc', 'docx', 'wps'); 修改这个sql 不使用函数的放啊
时间: 2023-08-06 15:19:39 浏览: 48
如果你不想使用函数,可以使用LIKE操作符来查找imagefilename字段中包含pdf、doc、docx、wps等后缀名的记录。你可以使用以下SQL查询语句来实现:
```
SELECT * FROM docimagefile
WHERE imagefilename LIKE '%.pdf' OR
imagefilename LIKE '%.doc' OR
imagefilename LIKE '%.docx' OR
imagefilename LIKE '%.wps';
```
这条SQL语句中使用了LIKE操作符,它可以匹配imagefilename字段中包含pdf、doc、docx、wps等后缀名的记录。%符号表示任意字符序列(包括空字符序列),所以'%.pdf'可以匹配以.pdf结尾的字符串,其他的类似。最终返回满足条件的所有记录。
相关问题
查docimagefile 表中 imagefilename字段.后面的值是pdf,doc,docx,wps等的sql该怎么写
你可以使用以下SQL查询语句来查找docimagefile表中imagefilename字段后面是pdf、doc、docx、wps等值的记录:
```
SELECT * FROM docimagefile WHERE SUBSTRING_INDEX(imagefilename, '.', -1) IN ('pdf', 'doc', 'docx', 'wps');
```
这条SQL语句中使用了SUBSTRING_INDEX函数来截取imagefilename字段中最后一个点号后面的字符串,也就是文件后缀名。然后使用IN操作符来查找后缀名为pdf、doc、docx、wps等的记录,最终返回满足条件的所有记录。
优化代码private List QryAllStaff(SqlSessionTemplate sqlSession, String selectStatement) { Map<String, Object> resultMap = new HashMap<>(); String selectSql = "select * from iuap_apdoc_basedoc.tb_hr_user a where DATE_FORMAT(NOW(), '%Y-%m-%d') = SUBSTRING(a.HR_TIMESTAMP,1,10) "; resultMap.put("sql", selectSql); List<Map<String, Object>> StaffDateList = sqlSession.selectList(selectStatement, resultMap); selectSql = "select * from iuap_apdoc_basedoc.tb_hr_family a where DATE_FORMAT(NOW(), '%Y-%m-%d') = SUBSTRING(a.HR_TIMESTAMP,1,10)"; resultMap.put("sql", selectSql); List<Map<String, Object>> StaffDateList1 = sqlSession.selectList(selectStatement, resultMap); selectSql = "select * from iuap_apdoc_basedoc.tb_hr_education a where DATE_FORMAT(NOW(), '%Y-%m-%d') = SUBSTRING(a.HR_TIMESTAMP,1,10)"; resultMap.put("sql", selectSql); List<Map<String, Object>> StaffDateList2 = sqlSession.selectList(selectStatement, resultMap); selectSql = "select * from iuap_apdoc_basedoc.tb_hr_employment_record a where DATE_FORMAT(NOW(), '%Y-%m-%d') = SUBSTRING(a.HR_TIMESTAMP,1,10)"; resultMap.put("sql", selectSql); List<Map<String, Object>> StaffDateList3 = sqlSession.selectList(selectStatement, resultMap); StaffDateList.addAll(StaffDateList1); StaffDateList.addAll(StaffDateList2); StaffDateList.addAll(StaffDateList3); return StaffDateList; }
可以将该函数优化为:
```java
private List<Map<String, Object>> QryAllStaff(SqlSessionTemplate sqlSession, String selectStatement) {
Map<String, Object> paramMap = Collections.singletonMap("dateStr", LocalDate.now().toString());
String selectSql = "select * from iuap_apdoc_basedoc.tb_hr_user a where SUBSTRING(a.HR_TIMESTAMP,1,10) = #{dateStr}";
List<Map<String, Object>> staffDataList = sqlSession.selectList(selectStatement, selectSql);
selectSql = "select * from iuap_apdoc_basedoc.tb_hr_family a where SUBSTRING(a.HR_TIMESTAMP,1,10) = #{dateStr}";
staffDataList.addAll(sqlSession.selectList(selectStatement, selectSql));
selectSql = "select * from iuap_apdoc_basedoc.tb_hr_education a where SUBSTRING(a.HR_TIMESTAMP,1,10) = #{dateStr}";
staffDataList.addAll(sqlSession.selectList(selectStatement, selectSql));
selectSql = "select * from iuap_apdoc_basedoc.tb_hr_employment_record a where SUBSTRING(a.HR_TIMESTAMP,1,10) = #{dateStr}";
staffDataList.addAll(sqlSession.selectList(selectStatement, selectSql));
return staffDataList;
}
```
这个函数使用了以下优化:
1. 使用 `LocalDate.now().toString()` 获取当前日期,避免了使用 `DATE_FORMAT(NOW(), '%Y-%m-%d')` 的开销;
2. 将每个查询的 SQL 语句和参数独立出来,避免了重复的代码;
3. 使用 `List.addAll()` 方法将查询的结果合并为一个列表,避免了多个列表合并的开销;
4. 将变量名由 `StaffDateList` 改为 `staffDataList`,符合 Java 命名规范。