辰运SPD操作手册
  • 修改
  • 更新日志
    • 20250810
    • 20250803
  • 页面设计
    • 按钮
      • 常用代码配置及说明
    • 搜索项
      • 搜索项OpenType
    • 自定义查询SQL

搜索结果

没有相关内容~~

自定义查询SQL

最新修改于 2025-08-04 13:50
## ⚠️ 前置注意事项 > PostgreSQL、OpenGauss 数据库默认会将 **未加引号的别名自动转为小写** ### 📄 示例说明 ```sql SELECT G_H.id, G_H.group_id, G_H.hospital_id, H_A.name AS hospitalName FROM spd_base_auth_group_hospital AS G_H JOIN spd_hospital_area AS H_A ON G_H.hospital_id = H_A.id WHERE G_H.delete_time IS NULL AND ${where} ORDER BY G_H.create_time ASC ``` 如上诉SQL中的 `hospitalName`, 执行后拿到的字段为`hospitalname` 此时返回给前端的字段也为`hospitalname` `但`这里入参就变为了`hospitalname`,如果有`hospitalname`的值,程序是会查找并替换原始SQL中的`hospitalname`而不是`hospitalName`,就会导致找不到字段从而报错 解决方案有两种: 1. 强制使用小写,如 as `hospital_name` 或 `hospitalname` 2. 如果一定要大写,必须在`hospitalName`上加上`""`号,即`"hospitalName"`,这样数据库执行后才会原样输出 --- 例如原始SQL为: ```sql select id,name,common_name,dict_code,status from spd_test where ${where} ``` 其中,${where}是全局的动态参数,这里面涉及到的数据不需要单独添加 如果前端传参查询了name, 会自动添加 `name like 输入的name值`,会生成如下SQL: ```sql SELECT tmp.* FROM ( select id,name,common_name,dict_code,status from spd_test where 1=1 AND (name LIKE '%' || '测试' || '%') ) AS tmp LIMIT 10 OFFSET 0 ``` 如果name字段设置了联合搜索,即同时搜索common_name字段, 会生成如下SQL: ```sql SELECT tmp.* FROM ( select id,name,common_name,dict_code,status from spd_test where 1=1 AND (name LIKE '%' || '测试' || '%' OR common_name LIKE '%' || '测试' || '%') ) AS tmp LIMIT 10 OFFSET 0 ``` > 注意:如果是联合搜索,`联合搜索的字段` `必须` 要存在于 select 的字段中 > > 关于联合搜索: 目前仅`支持` `显示类型` 为 `文本`的组件 ### 关于ORDER BY XXX 如原始SQL为 ```sql select id,name,common_name,dict_code,status from spd_test where ${where} order by id ``` 如传入,按照id asc排序,会生成一下SQL ```sql SELECT tmp.* FROM ( select id,name,common_name,dict_code,status from spd_test where 1=1 AND (name LIKE '%' || '测试' || '%' OR common_name LIKE '%' || '测试' || '%') order by id ) AS tmp ORDER BY id desc LIMIT 10 OFFSET 0 ``` 如果是多条件,如先按照id asc, 再按照create_time desc ```sql SELECT tmp.* FROM ( select id,name,common_name,dict_code,status,create_time from spd_test where 1=1 AND (name LIKE '%' || '测试' || '%' OR common_name LIKE '%' || '测试' || '%') order by id ) AS tmp ORDER BY id desc,create_time desc LIMIT 10 OFFSET 0 ``` ### 关于非$ {where}类型,如SQL内需要 按照create_time >= "搜索项的值" ```sql select id,name,common_name,dict_code,status,create_time from spd_test where ${where} and update_time >= :create_time_start order by id ``` > 如上所示: create_time 是非${where}类型,需要使用`:`进行参数化, 如上所示 :create_time_start > 同时,需要在 搜索项 中 勾选"SQL 内执行",非区间查询,在SQL中使用 > create_time_start 是create_time的开始时间,create_time_end 是create_time的结束时间,数字区间同理,fieldX_start/end > 如果设置了该值,前端没有传入该值,会报错未找到XXX字段 ### 关于默认值的变量 目前支持下拉框、日期选择(日期选择特殊,需在配置内设置) > ${first} 选中第一个 > ${all} 选中全部 > 日期选择范围可选: > `近7天` `近30天` `本月开始到今天` `本周开始到今天` `本季度开始到今天` `本年开始到今天` `上个季度` > 日期可选 > `当前日` `本月第一天` `本月最后一天` `本周第一天` `本周最后一天` `上月第一天` `上月最后一天` `本季度第一天` `本季度最后一天` `本年第一天` `本年最后一天` 文本后续已规划、未完善的变量 > ${userBelongToDepts} 当前登录用户所属科室 ``` ```
开始访问