如何在 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 5 的嵌套查询中使用 GroupBy?
Laravel 8 - MS SQL - 查询生成器 - 使用 DB Raw。尝试使代码正确,使其像工作的 MSSQL 代码一样工作