Skip to content
  • Hash icon  Go
  • squirrelのGtOrEqとLtOrEqの使い方メモ

    Calendar icon Published:
    squirrelのGtOrEqとLtOrEqの使い方メモ

    今日Goでコード書いてて、データベースから条件検索するときにつまづいたのでメモ。

    squirrelライブラリとは

    squirrelはGo言語でSQLを組み立てるためのライブラリ。生のSQLを書くよりも型安全に書けるので便利。

    import "github.com/Masterminds/squirrel"

    色々な比較演算子

    Gt - Greater Than (より大きい)

    Gtは「Greater Than」の略で、SQLの「>」演算子に相当します。「より大きい」という条件を表します。

    // IDが100より大きいレコードを取得
    users := squirrel.Select("id", "name").
        From("users").
        Where(squirrel.Gt{
            "id": 100,
        })

    GtOrEq - Greater Than or Equal (以上)

    GtOrEqは「Greater Than or Equal」の略で、SQLの「>=」のこと。「以上」って意味。

    // created_atが7日前以降のデータを取る
    users := squirrel.Select("id", "name").
        From("users").
        Where(squirrel.GtOrEq{
            "created_at": time.Now().AddDate(0, 0, -7),
        })

    Lt - Less Than (より小さい)

    Ltは「Less Than」の略で、SQLの「<」演算子に相当します。「より小さい」という条件を表します。

    // 価格が1000円より小さい商品を取得
    items := squirrel.Select("id", "name").
        From("items").
        Where(squirrel.Lt{
            "price": 1000,
        })

    LtOrEq - Less Than or Equal (以下)

    LtOrEqは「Less Than or Equal」の略で、SQLの「<=」のこと。「以下」って意味。

    // 値段が1000円以下の商品を取る
    items := squirrel.Select("id", "name").
        From("items").
        Where(squirrel.LtOrEq{
            "price": 1000,
        })

    複数条件を組み合わせる

    両方使って範囲検索みたいなことをやりたいときは、And{}を使って組み合わせる。

    // 値段が100円以上500円以下の商品
    items := sq.Select("*").
        From("items").
        Where(sq.And{
            sq.GtOrEq{"price": 100},
            sq.LtOrEq{"price": 500},
        })

    他の条件と組み合わせることもできる:

    // 会社IDが3で、作成日が1週間以内のユーザー
    users := squirrel.Select("*").
        From("users").
        Where("company_id = ?", 3).
        Where(squirrel.GtOrEq{
            "created_at": time.Now().AddDate(0, 0, -7),
        })

    注意点

    • BETWEENを直接書けない(上の例みたいにAnd{}とGtOrEq/LtOrEqを使うか、Expr()で直接SQLを書く)
    • 値がnilのときはIS NULL/IS NOT NULLになるので注意
    • 配列を渡すとIN句になる

    まとめ

    squirrelを使うとSQLを安全に書けて便利。GtOrEqとLtOrEqは「以上」「以下」の条件を書くときに使う。複数条件はAnd{}やOr{}で組み合わせる。

    参考

    https://pkg.go.dev/github.com/Masterminds/squirrel