我正在使用rust-postgres library,我想做一个SELECT并检查第一行的第一列是否为NULL。
这就是我获取数据的方式:
let result = connection.query(
r#"
SELECT structure::TEXT
FROM sentence
WHERE id = $1
"#,
&[&uuid]
);
let rows = result.expect("problem while getting sentence");
let row = rows
.iter()
.next() // there's only 1 result
.expect("0 results, expected one...");
我发现解决问题的唯一简单方法是以下代码:
match row.get_opt(0) {
Some(Ok(data)) => some data found,
Some(Err(_)) => the column is null,
None => out of bound column index
}
不幸的是,似乎Some(Err(_))
是任何类型的SQL /数据库错误的执行路径,而且不仅仅是检索到的列是NULL。
我应该使用哪种条件来检查列是否为空?
答案 0 :(得分:1)
如果您需要知道的 ,该列是否为NULL
,您可以尝试将查询更改为:
SELECT COUNT(1) FROM sentence WHERE id = $1 AND structure IS NOT NULL
有或没有NOT
。
如果你想让逻辑变得更简单,那么任何错误都是一个实际错误,我会考虑将选择值改为:
COALESCE( structure::TEXT, ''::TEXT ) AS "structure"
所以永远不应该是NULL
。只要空字符串不是该列的有效非NULL
值,这应该有效。
否则,我可能误解了你的问题。