在使用Postgres JDBC时,我遇到了有关字符串查询的问题。以下查询正在使用Auqadata Studio等工具,但无法使用代码。
代码如下;
// strSqlStatement is passed from a framework as String like this and executed untouched
strSqlStatement = "SELECT columnA FROM abc.table1 WHERE columnB= '%KLMN%' limit 1;";
...
strDBUrl = "jdbc:postgresql://x.x.x.x:1234/instance?useUnicode=yes&characterEncoding=UTF-8";
...
rs = st.executeQuery(strSqlStatement);
在Postgres数据库中,columnB as;
存在记录... ColumnA ... ColumnB ... ColumnC
------- ------- -------
value1 | TEST_AA_KLMN_BB_S | 25
value2 | TEST2_AA_KLMN_BB_S | 79
value3 | TEST3_AA_KLMN_BB_S | 124
问题是这样的,通常用WHERE clause as ColumnB = 'TEST2_AA_KLMN_BB_S'
查询value2应该可以工作,但这个简单的查询不起作用。另外LIKE条款ColumnB LIKE '%KLMN%'
根本不起作用。
将其他列作为ColumnC用于WHERE子句时没有问题。
我检查过我们的Postgres数据库没有设置区域设置(lc_ctype = C),数据库的编码是UTF-8(server_encoding = UTF8)。
背景;
修改
@Francisco Puga,我错误地写了WHERE columnB= '%KLMN%'
有问题,它在实际代码中是正确的WHERE columnB LIKE '%KLMN%'
,但是,谢谢你的快速回复。
我已经缩小了问题范围。我发现=
和LIKE
实际上正在发挥作用,但字符串存在限制问题。
如果比较字符串短于25个字符,一切都很好但是当比较字符串超过25个字符时,结果为空。实际上25个角色对我没有响铃。
答案 0 :(得分:1)
不确定它是否是拼写错误,但你的where子句是:
WHERE columnB= '%KLMN%'
应该是:
WHERE columnB LIKE '%KLMN%'
如果你想忽略大写,甚至可以使用ILIKE
。
还要考虑到,如果在列名中使用大写,则在进行查询时应使用双引号(但如果这是问题,则应该抛出错误,而不是空记录集)
SELECT "ColumnA" FROM abc.table1 WHERE "ColumnB" ILIKE '%KLMN%' limit 1;