【发布时间】:2020-05-22 15:30:37
【问题描述】:
我有一个空名称值的测试表:
create table tmp_table_test (id serial, name varchar(100));
insert into tmp_table_test (name) values ('');
insert into tmp_table_test (name) values ('a');
insert into tmp_table_test (name) values ('b');
当我运行这个查询时:
SelectSQLPrepared("SELECT id, name FROM tmp_table_test WHERE name IN ('', 'a') order by 1;")
我看到两条记录。
现在我想把它改成PreparedStatement,看到同样的记录,但是不知道怎么把空字符串插入到数组中。
我试过了
SelectSQLPrepared("SELECT id, name FROM tmp_table_test WHERE name IN (SELECT unnest(?::text[])) order by 1;", "{'', a}")
或:
SelectSQLPrepared("SELECT id, name FROM tmp_table_test WHERE name = ANY (?::text[])", "{'', a}")
但它只返回a 名称的记录。
我试过了:
SelectSQLPrepared("SELECT id, name FROM tmp_table_test WHERE name IN (SELECT unnest(?::text[])) order by 1;", "{, a}")
但它给出了错误:
ERROR: malformed array literal: "{, a}"
我发明的唯一查询看起来很奇怪:
SelectSQLPrepared("SELECT id, name FROM tmp_table_test WHERE name IN (SELECT unnest(string_to_array(?, ','))) order by 1;", ",a")
,a 作为string_to_array() 的参数,它给了我一个空字符串和a 的数组,但是我不知道如何转义输入值中的冒号。
有没有办法使用带有IN子句的prepared statement来搜索空字符串值?
【问题讨论】:
标签: sql postgresql prepared-statement