APIJSON icon indicating copy to clipboard operation
APIJSON copied to clipboard

oracle日期比较问题

Open zhangmingqi09 opened this issue 4 years ago • 9 comments

你好,请问oracle日期比较,比如 where sysdate>to_date('20211014','YYYYMMDD') 这种该如何使用呢? 请指点一下谢谢!

zhangmingqi09 avatar Oct 14 '21 09:10 zhangmingqi09

可以用 apijson-orm-4.8.0.jar 加 @raw 实现 https://github.com/Tencent/APIJSON/blob/master/Document.md

或者参考这个用户的处理方式 https://gitee.com/Tencent/APIJSON/issues/I4A475#note_6964115_link

TommyLemon avatar Oct 14 '21 10:10 TommyLemon

您好,看了您的回复,有几点疑惑:

  1. 我用的是 4.7.2 的版本,看源码也有@raw的key,不一定要4.8.0吧?

  2. 使用@raw的方式需要在RAW_MAP配置key,但在AbstractSQLConfig类中的getRawSQL方法中是RAW_MAP.get(value),而不是RAW_MAP.get(key),还是说我RAW_MAP中配置错了?我在RAW_MAP中加的是 RAW_MAP.put("date&{}", ""),@raw的value为"date&{}"; image

  3. 使用另一种方式实现:https://gitee.com/Tencent/APIJSON/issues/I4A475#note_6964115_link, 重写getValue方法后,keyType为4,getRangeString中 range instanceof String 的条件分支并未执行getValue方法,我看到getBetweenString中是执行getValue的,是否我应该把key从 date&{} 修改为 date% 进行范围查询?

以上几点疑惑麻烦有空指点一下谢谢!

zhangmingqi09 avatar Oct 15 '21 02:10 zhangmingqi09

1.必须 4.8.0,否则不支持单引号

2.RAW_MAP 在 4.8.0 可不配置,或者配置 RAW_MAP.put("rawkey", "to_date('20211014','YYYYMMDD')"); 前端传的是 "rawkey"

3.应该会执行,不执行就是有 bug,再断点确认下

TommyLemon avatar Oct 15 '21 07:10 TommyLemon

配置 RAW_MAP.put("rawkey", "to_date('20211014','YYYYMMDD')"); 那怎么动态设置日期参数呢?

zhangmingqi09 avatar Oct 15 '21 12:10 zhangmingqi09

配置 RAW_MAP.put("rawkey", "to_date('20211014','YYYYMMDD')"); 那怎么动态设置日期参数呢?

这是个问题,所以得用 4.8.0,不用配置 RAW_MAP 都可以直接传 '字符串'

TommyLemon avatar Oct 15 '21 14:10 TommyLemon

4.8.0的版本只有jar包吗,最新的源码看到的还是4.7.2 <groupId>apijson.orm</groupId> <artifactId>apijson-orm</artifactId> <version>4.7.2</version> <packaging>jar</packaging>

zhangmingqi09 avatar Oct 16 '21 09:10 zhangmingqi09

4.8.0的版本只有jar包吗,最新的源码看到的还是4.7.2 <groupId>apijson.orm</groupId> <artifactId>apijson-orm</artifactId> <version>4.7.2</version> <packaging>jar</packaging>

对,正式发布后会有 maven 依赖

TommyLemon avatar Oct 16 '21 14:10 TommyLemon

@zhangmingqi09 试试 @cast https://github.com/Tencent/APIJSON/commit/36a5612f86e9b9b557a62f85a0f1487cc8f51ac0

http://localhost:8080/get/User[]

{
    "User": {
        "date>": "2017-02-01 11:21:50",
        "@cast": "date>:DATETIME",
        "@explain": true
    }
}

image

TommyLemon avatar Mar 06 '22 12:03 TommyLemon

取消注释来兼容 Oracle DATETIME, TIMESTAMP 等日期时间类型的值来写库 https://github.com/APIJSON/APIJSON-Demo/blob/master/APIJSON-Java-Server/APIJSONBoot/src/main/java/apijson/demo/DemoSQLConfig.java#L293-L312 image

如果是查询,可以把 if 内 isQueryMethod 的判断去掉或者 boolean 值取反。

另外也可以通过 @column + @having + @raw 来实现:

  RAW_MAP.put("toDate", "");  // "@column": "date;date_format('2020-01-01','%Y-%m-%d'):toDate", "@having": "(date > toDate)", "@raw": "@column,@having"
image

POST /get

{
    "User": {
        "@column": "id,name,date;date_format('2020-01-01','%Y-%m-%d'):toDate",
        "@having": "(date > toDate)",
        "@raw": "@column,@having",
        "@explain": true
    }
}
image

http://apijson.cn/api/?send=false&type=JSON&url=http%3A%2F%2Flocalhost%3A8080%2Fget&json={%22User%22:{%22@column%22:%22id%2Cname%2Cdate%3Bdate_format(%272020-01-01%27%2C%27%25Y-%25m-%25d%27)%3AtoDate%22,%22@having%22:%22(date%20%3E%20toDate)%22,%22@raw%22:%22%40column%2C%40having%22,%22@explain%22:true}}

TommyLemon avatar May 26 '22 15:05 TommyLemon