go with sqlx NamedQuery 时间戳适用于日期但不适用于日期时间。命名查询与查询
go with sqlx NamedQuery timestamp works with date but not with datetime. NamedQuery vs Query
rows, err := db.NamedQuery(`SELECT ts FROM test_table WHERE ts > '1999-01-08 04:05:06';`, map[string]interface{}{})
上面的代码给我以下错误:
unexpected `:` while reading named param at 74
panic: runtime error: invalid memory address or nil pointer dereference
这很奇怪,如下片段,
rows, err := db.NamedQuery(`SELECT ts FROM test_table WHERE ts > '1999-01-08';`, map[string]interface{}{})
运行无故障。
两者之间的区别,是在输入中增加时间。
我使用 db.Query
而不是 sqlx 方法 db.NamedQuery
解决了我的问题。
我现在明白我应该将我的输入作为参数传递给 NamedQuery。
人们通常如何编写这样的查询,为什么要使用 NamedQuery 而不是 Query?
why would you use NamedQuery rather than Query?
使用命名参数的查询更容易被人解析。
How does one typically write such a query
layout := "2006-01-02 15:04:05"
ts, err := time.Parse(layout, "1999-01-08 04:05:06")
if err != nil {
return err
}
arg := map[string]interface{}{"ts": ts}
rows, err := db.NamedQuery(`SELECT ts FROM test_table WHERE ts > :ts`, arg)
if err != nil {
return err
}
rows, err := db.NamedQuery(`SELECT ts FROM test_table WHERE ts > '1999-01-08 04:05:06';`, map[string]interface{}{})
上面的代码给我以下错误:
unexpected `:` while reading named param at 74
panic: runtime error: invalid memory address or nil pointer dereference
这很奇怪,如下片段,
rows, err := db.NamedQuery(`SELECT ts FROM test_table WHERE ts > '1999-01-08';`, map[string]interface{}{})
运行无故障。 两者之间的区别,是在输入中增加时间。
我使用 db.Query
而不是 sqlx 方法 db.NamedQuery
解决了我的问题。
我现在明白我应该将我的输入作为参数传递给 NamedQuery。 人们通常如何编写这样的查询,为什么要使用 NamedQuery 而不是 Query?
why would you use NamedQuery rather than Query?
使用命名参数的查询更容易被人解析。
How does one typically write such a query
layout := "2006-01-02 15:04:05"
ts, err := time.Parse(layout, "1999-01-08 04:05:06")
if err != nil {
return err
}
arg := map[string]interface{}{"ts": ts}
rows, err := db.NamedQuery(`SELECT ts FROM test_table WHERE ts > :ts`, arg)
if err != nil {
return err
}