【发布时间】: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'。
标签: laravel eloquent orm laravel-8 laravel-datatables