SQL Laravel Eloquent 中的查询子字符串

SQL query substring in Laravel Eloquent

我在 Laravel 8 中获取 SQL 查询时遇到问题。我需要的是 name 列中的第一个字符,但只有 distinct 个字符。我想使用字符作为词汇表描述的链接。

$chars = DB::table('parts')
            ->distinct()
            ->select('name')
            ->orderBy('name', 'asc')
            ->get();

我尝试将 ->select('name') 行替换为 ->select(DB::raw('SUBSTRING(name, 0, 1)')) 行。但是输出显然是错误的。我找到了一个完全像这样使用 SUBSTRING 的例子。我的查询有什么问题?

您应该像这样更改您的查询:

$chars = DB::table('parts')
    ->distinct()
    ->select(DB::raw('SUBSTRING(name, 0,2) char_name'))
    ->orderBy('char_name', 'asc')
    ->get();

SQL 服务器和 MySQL 中的子字符串使用基于 1 的索引作为位置。你的第二个参数应该是 1,表示第一个字符。您的第三个参数应为 1,表示您只需要 1 个字符。

$chars = DB::table('parts')
    ->distinct()
    ->selectRaw('SUBSTRING(name, 1, 1) name_index')
    ->orderBy('name', 'asc')
    ->get();