我有一个领域&它有逗号分隔 ID,所以我想从所选的ID中找到,这是我的代码,
void Foo(string path){
try{
XDocument document = XDocument.Load(path);
Validate(document);
//Some logic
}
catch(Exception ex){
//Some logic
}
}
void Validate(XDocument document){
XmlSchemaSet schema = new XmlSchemaSet();
schema.Add("", XmlReader.Create(new StringReader("XsdFile")));
document.Validate(schema, null);
}
===>当我使用 KNEX 时,会出现类似错误,
.get(function(req, res) {
knex.select('*')
.from('exam')
.whereRaw('? = any(regexp_split_to_array(student_id))', [req.params.id])
.then(function(rows) {
//return res.send(rows);
console.log(rows);
})
.catch(function(error) {
console.log(error)
});
});
答案 0 :(得分:1)
假设您正在使用PostgreSQL数据库(我在屏幕截图中看到您使用phpPgAdmin)。您可以使用regexp_split_to_array函数将字符串转换为数组(显然:)。并使用任何。
对结果数组执行搜索在SQL语言中,它可以像这样写成
select '35' = any(regexp_split_to_array('33,34,35,36', E','));
在您的查询中,您可以将.where
替换为
.whereRaw("? = any(regexp_split_to_array(student_id, E','))", [req.params.id])
但请记住,这可能是性能繁重的请求,因为每行执行字符串拆分操作。更好的方法(假设项目必须在一行中包含数组值)是将student_id
存储在数组类型中并在student_id
列上添加gin索引并执行this
select * from table where student_id @> '{35}';