首页 > 解决方案 > 如何使用gorm从字符串中获取特定数量的字符?

问题描述

我正在使用 SQLite,例如,如果我有一个 400 个字符串的文本帖子或文章,我只想从中提取前 100 个字符以用于前端。

在第 4 行中,我从数据库中提取了最新的 5 个帖子,但我想将帖子的正文限制为前 100 个字符

func GetLatestPosts() *[]Post {
    db := database.Connect()
    var posts []Post
    db.Limit(5).Order("created_at desc").Find(&posts)
    // SELECT LEFT(body, 100) FROM posts
    // db.Raw("SELECT id, title, body, tags FROM posts").Scan(&posts)
    return &posts
}

我怎样才能做到这一点 ?

标签: sqlgo-gorm

解决方案


您想要的是在帖子正文上使用SelectRaw运行substrsqlite 函数。

像这样:

err := db.Select("id, title, substr(body, 1, 100) AS body, tags").
    Limit(5).
    Order("created_at DESC").
    Find(&posts).
    Error
// error check

或使用原始:

err := db.Raw("SELECT id, title, substr(body, 1, 100) AS body, tags FROM posts").
    Scan(&posts).
    Error
// error check

要记住的关键方面是确保列被命名body,以便扫描到您的模型中像以前一样工作。


推荐阅读