Rumah >pembangunan bahagian belakang >Golang >Pertanyaan SQL golang GORM menjalankan carian tidak sensitif huruf besar tidak berfungsi

Pertanyaan SQL golang GORM menjalankan carian tidak sensitif huruf besar tidak berfungsi

PHPz
PHPzke hadapan
2024-02-05 22:03:081006semak imbas

GORM golang SQL 查询执行不区分大小写的搜索不起作用

Kandungan soalan

Saya ingin melakukan carian tidak sensitif huruf di Golang. Saya menggunakan perpustakaan ini.

Saya telah mencuba yang berikut tetapi tidak berkesan.

someId = "abc"
model := abcModel{Id: someId}
result := p.db.Where("lower(id) = lower(?)", someId).Take(&model)
<code>
Id is primary-key here
</code>

Saya pun mencubanya

db.Where("LOWER(id) LIKE LOWER(?)", fmt.Sprintf("%%%s%%", someId)).Take(&model)

Ada sesiapa boleh tolong? Tidak pasti apa yang salah. Sebarang petunjuk akan amat dihargai.

Terima kasih!

Diedit:

Ini yang saya ada dalam pangkalan data

id      |          created_at           |          updated_at           | deleted_at |  client_id | ttl  |             client_type              |    token  |          expires_on          
--------------------------------------+-------------------------------+-------------------------------+------------+--------------------------------------+------+--------------------------------------+
        ABC      | 2023-10-30 16:10:59.614132+00 | 2023-10-30 16:10:59.614132+00 |            |  ae30e377  | 100  | 7da0e618-7393-45c2-94dc-5e7b1d6c1610 |   abc     | 2023-10-30 16:27:39.613566+00

Saya menjangkakan pertanyaan di atas akan mengembalikan rekod ini dalam pangkalan data kerana ia adalah carian yang tidak sensitif huruf.

Ralat yang saya terima ialah record not found https://gorm.io/docs/error_handling.html#ErrRecordNotFound

Saya menjalankan pelayan Postgres dalam bekas Docker. https://hub.docker.com/_/postgres


Jawapan yang betul


belum jelas p 代表什么,但这里有一个使用 Take()Where().Take() Contoh yang berfungsi:

func main() {
    // open connection to postgres
    db, err := gorm.Open(postgres.New(...), &gorm.Config{})
    if err != nil {
        panic("failed to connect database")
    }

    // Get the row
    someId := "abc"
    var result abcModel
    db.Take(&result, "lower(id) = lower(?)", someId)
    // Print the row
    fmt.Println(result)

    // Find the row using Where
    var result2 abcModel
    db.Where("lower(id) = lower(?)", someId).Take(&result2)
    // Print the row
    fmt.Println(result2)

}

Keluaran:

$ go run .
{ABC 2023-10-30 10:00:57.774905 -0700 PDT 2023-10-30 10:00:57.774905 -0700 PDT <nil> ae30e377 100 7da0e618-7393-45c2-94dc-5e7b1d6c1610 abc 2023-10-30 10:00:57.774906 -0700 PDT}
{ABC 2023-10-30 10:00:57.774905 -0700 PDT 2023-10-30 10:00:57.774905 -0700 PDT <nil> ae30e377 100 7da0e618-7393-45c2-94dc-5e7b1d6c1610 abc 2023-10-30 10:00:57.774906 -0700 PDT}

Jadi kod asal anda nampaknya berfungsi, cuma ralat anda mungkin berkaitan dengan cara p ditakrifkan

Atas ialah kandungan terperinci Pertanyaan SQL golang GORM menjalankan carian tidak sensitif huruf besar tidak berfungsi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Artikel sebelumnya:Konflik nama kunci xml GolangArtikel seterusnya:Konflik nama kunci xml Golang