【问题标题】:How to use Nested functions substr(), cast() and Max() in query builder in laravel 8?如何在 laravel 8 的查询生成器中使用嵌套函数 substr()、cast() 和 Max()?
【发布时间】:2021-04-16 05:19:14
【问题描述】:

我昨天发布了这个问题,但我认为它不清楚,所以我删除了它并再次发布了更多详细信息。 在我的 oracle 数据库中,我有一个 id_user 定义为 varchar 的 USERS 表,这个 varchar 是这样的:'145/1'......'145/9 ' 所以要添加一个新用户,我检查最大值('145/9')并将 1 添加到 id_user 的第二部分(斜线之后),以便 id_user 为 '145/10'。

步骤如下:

  1. 首先:我正在使用 substr() 来获取所有 id_user 的第二部分(斜线之后)。
  2. 第二:我使用 Cast() 将其转换为 Int。
  3. 第三:我使用 Max() 来获取 Int 数的最大值。

最后,在我的 laravel 代码中,我使用了这个查询的结果(结果是 9)并在其中添加 1 并在 users 表中插入一个 id_user = '145/10' 的新用户等等。 这个查询工作正常,但我需要在查询生成器中使用它,所以我尝试了很多查询,但它们没有用。(请帮助我)

SELECT MAX(CAST(SUBSTR(id_user, INSTR (id_user, '/') + 1) AS INT)) AS Aggregate 
FROM "users" 
WHERE "ID_USER" LIKE '145/%';

【问题讨论】:

  • 搜索DB:raw(),我想你也应该更新你的设计,以正确的数据类型将这2个值存储在2个不同的属性中,这样你就不需要那个cast和substr类型复杂的东西
  • 我需要 cast 和 substr,因为 max 不能正确处理如下混合值(int 和 string):'145/1' .... '145/6' ....' 145/10' 在这种情况下,max() 函数给了我 145/6 而不是 '145/10'。

标签: laravel eloquent orm laravel-8 laravel-datatables


【解决方案1】:

最后,这个查询给了我正确的最大值:

 DB::table('users')->select(DB::raw('MAX(CAST(SUBSTR(id_user,INSTR(id_user, \'/\') + 1) AS INT)) as max')) ->where('id_user','like','145'.'/%')->get()[0];

【讨论】:

    猜你喜欢
    • 2018-06-02
    • 2021-01-01
    • 2016-02-05
    • 2016-11-16
    • 2016-03-23
    • 2015-11-17
    • 1970-01-01
    • 2018-10-23
    • 2017-05-26
    相关资源
    最近更新 更多