我希望在sql语句中获得sql and
条件
输入:
And tbl.col1='Jim And Tom' and tbl.col2 like '%Test' AND tbl.col3 >='2018-12-12' And tbl.col4 Like 'what's this'
预期输出
tbl.col1='Jim And Tom'
tbl.col2 like '%Test'
tbl.col3 >='2018-12-12'
tbl.col4 Like 'what's this'
顺便说一句,我已经尝试过java拆分来执行此操作,但如果关键字包含and
,则无法正常工作
String[] subFilters = Pattern.compile("\\s*and\\s*",Pattern.CASE_INSENSITIVE).split(filter);
如果可以通过java regex获得输出?
答案 0 :(得分:0)
试试这个:
String s = "And condition 1 here and tbl.col2 like '%Test' AND tbl.col3 >='2018-12-12' And tbl.col4 Like 'what\\'s this'";
s = s.trim();
s = s.substring(3).trim();
boolean exclude = false;
s = s + " and";
String str = "";
for(int i = 0; i < s.length()-3; i++)
{
if( s.charAt(i) == '\'' && !(s.charAt(i-1) == '\\') )
{
exclude = !exclude;
}
if((!s.substring(i, i+3).equalsIgnoreCase("and") || exclude) && (i != s.length()-4))
{
str += s.charAt(i);
}
else
{
System.out.println(str);
str = "";
i += 3;
}
}
注意 - 上述代码几乎适用于任何条件类型,但正如Wiktor在评论中提到的那样,您需要使用'what\\'s this'
代替{{1} }
当排除为'what's this'
时,表示正在检查的字母(实质上是单词)在''内。因此,true
会在''中存储任意和所有字符,包括臭名昭着的str
and
表示正在检查和存储的字符将是字符串结尾的三个字母之前的字符。这很重要,因为我们之前添加了i < s.length() - 3
到" and"
。
现在,如果s
上的字母为i
,且前面没有'
,则\
的值会反转,即如果系统正在被告知包括所有单词,甚至exclude
,然后现在被告知不要。因此,使用此方法捕获引文中的任何and
。
and
是一种非常乏味的方式,可以说如果该字母不属于if((!s.substring(i, i+3).equalsIgnoreCase("and") || exclude) && (i != s.length()-4))
分隔符,(或者如果是最后条件的最后一个字母),然后它应存储在and
。
输入可能的最佳解释非常困难,但我确定如果你阅读的代码很长很难,那么你会更好地理解它。