3
@Test
public void parseTest() {
String sql = "select * from orders \n" +
"where address not like all (array['%北京%','%杭州%','%成都%'])";
// String sql = "select * from orders where address=? ";
List<SQLStatement> sqlList = SQLUtils.parseStatements(sql, DbType.of("postgresql"));
SQLStatement stmt = sqlList.get(0);
SQLSelectStatement selectStmt = (SQLSelectStatement) stmt;
selectStmt.addWhere(new SQLBinaryOpExpr(new SQLIntegerExpr(1), SQLBinaryOperator.Equality, new SQLIntegerExpr(2)));
System.out.println(stmt.toString());
}
执行以上测试方法报错:com.alibaba.druid.sql.parser.ParserException: syntax error, expect ), actual ARRAY pos 55, line 2, column 30, token ARRAY
at com.alibaba.druid.sql.parser.SQLExprParser.accept(SQLExprParser.java:4626)
postgresql建表语句如下:
create table orders
(
id serial not null
constraint orders_pkey
primary key,
user_id integer not null,
total numeric(10,2) not null,
status smallint not null,
createtime timestamp not null,
address varchar(100),
receiver varchar(50),
mobile varchar(20)
);
INSERT INTO orders (user_id, total, status, createtime, address, receiver, mobile) VALUES
(1, 199.5, 1, '2023-02-15 15:32:08', '北京市海淀区XX街道XX号', '张三', '13900000000'),
(2, 249.8, 0, '2023-02-14 09:12:45', '上海市静安区XX路XX号', '李四', '13800000001'),
(3, 599.8, 1, '2023-02-16 12:18:25', '深圳市南山区XX大道XX号', '王五', '13700000002');
INSERT INTO orders (user_id, total, status, createtime, address, receiver, mobile) VALUES
(4, 299.9, 1, '2023-02-17 10:15:20', '武汉市武昌区XX路XX号', '赵六', '13600000003'),
(5, 399.8, 0, '2023-02-18 09:20:35', '杭州市西湖区XX街XX号', '孙七', '13500000004'),
(6, 799.5, 1, '2023-02-19 12:45:12', '成都市锦江区XX街XX号', '周八', '13400000005'),
(7, 549.2, 0, '2023-02-20 08:32:10', '南京市建邺区XX路XX号', '吴九', '13300000006'),
(8, 299.2, 1, '2023-02-21 11:08:45', '厦门市思明区XX街XX巷XX号', '郑十', '13200000007'),
(9, 199.8, 0, '2023-02-22 14:28:13', '福州市鼓楼区XX路XX号', '刘十一', '13100000008'),
(10, 449.5, 1, '2023-02-23 09:45:20', '广州市天河区XX街XX号', '陈十二', '13900000009'),
(11, 599.2, 0, '2023-02-24 12:32:08', '苏州市姑苏区XX路XX弄XX号', '张十三', '13800000010'),
(12, 699.8, 1, '2023-02-25 08:10:15', '大连市沙河口区XX街XX号', '王十四', '13700000011'),
(13, 399.5, 0, '2023-02-26 15:45:35', '青岛市市南区XX路XX号', '李十五', '13600000012');
datagrid中执行:select * from orders where address not like all (array['%北京%','%杭州%','%成都%']);结果如下: