如何在 laravel 8 的查询生成器中使用嵌套函数 substr()、cast() 和 Max()?

Posted

技术标签:

【中文标题】如何在 laravel 8 的查询生成器中使用嵌套函数 substr()、cast() 和 Max()?【英文标题】:How to use Nested functions substr(), cast() and Max() in query builder in laravel 8? 【发布时间】: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'。

步骤如下:

    首先:我正在使用 substr() 来获取所有 id_user 的第二部分(斜线之后)。 第二:我使用 Cast() 将其转换为 Int。 第三:我使用 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'。 【参考方案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];

【讨论】:

以上是关于如何在 laravel 8 的查询生成器中使用嵌套函数 substr()、cast() 和 Max()?的主要内容,如果未能解决你的问题,请参考以下文章

使用 laravel 查询生成器嵌套选择?

Laravel 使用查询生成器进行嵌套连接查询

Laravel:嵌套查询连接导致子数组

如何在 Laravel 5 的嵌套查询中使用 GroupBy?

Laravel 8 - MS SQL - 查询生成器 - 使用 DB Raw。尝试使代码正确,使其像工作的 MSSQL 代码一样工作

如何使用 Laravel 查询构建器编写嵌套连接?