查询语句的字符串处理方法及装置
文献发布时间:2023-06-19 10:57:17
技术领域
本发明涉及查询语句的字符串处理技术领域,尤其涉及一种查询语句的字符串处理方法及装置。
背景技术
数据库用于存储各种类型数据,包括数值型、时间型、字符串型等。在常见的关系型数据库中,SQL引用字符串时,都会单引号把相应的字符串包起来,单引号在SQL中为引用字符串的作用。例如:
insert into a(id,info)values(1,'abc');
Update a set info='dawef'where id=1;
如果想把单引号插入数据库时,例如我们要插入的字符串是a'b'c,如果直接用单引号包起来,就像:
insert into a(id,info)values(1,'a'b'c');
这时候SQL中的字符串'a'b'c',程序无法判断字符串的确切起始位置;这时候很多关系型数据库就会用转义字符转义。部分数据库转义符为【\】,如SQL字符串为:
insert into a(id,info)values(1,'a\'b\'c');
部分数据库转义符为【'】,如SQL字符串为:
insert into a(id,info)values(1,'a”b”c');
可以看到,无论转义符是【\】还是【'】,SQL字符串看起来都不那么直观易懂。因此对于目前主流关系型数据库中,字符串都是用【”】包起来。但是如果是字符串含有【'】字符时,就需要转义字符,并且让字符串处理麻烦,也不直观。
发明内容
有鉴于此,本发明提供一种查询语句的字符串处理方法及装置,以使得字符串起止符号更加灵活,而且字符串更加直观。
一方面,本发明提供一种查询语句的字符串处理方法,包括:在对SQL查询语句的字符串处理时,判断当前字符是否为英文字母q;
在当前字符是否为英文字母q时,继续判断下一字符是否为单引号字符;
在下一字符为单引号字符时,将所述单引号字符后面的第一个字符作为第一标识符;将所述第一标识符与第二标识符之间的字符作为提取的字符串,所述第二标识符位于第一标识符之后,所述第二标识符后面的第一个字符为单引号字符;其中,当所述第一字符为用于表征左侧括号的字符时,所述第二标识符为所述第一字符对应的右侧括号的字符;当所述第一字符为用于字母字符时,所述第二标识符与所述第一字符相同。
进一步地,当所述第一标识符为表征左侧小括号的字符,所述第二标识符为表征右侧小括号的字符时,
所述将所述第一标识符与第二标识符之间的字符作为提取的字符串的步骤包括:
依次获取所述左侧小括号的字符后面的字符作为待分析字符,
判断所述待分析字符是否为右侧小括号的字符;
在所述待分析字符为右侧小括号的字符且所述待分析字符的后面一个字符为单引号时,将所述左侧小括号的字符后面的字符与所述右侧小括号的字符之间的字符作为提取的字符串。
进一步地,所述第一标识符为表征左侧中括号的字符,所述第二标识符为表征右侧中括号的字符时,
所述将所述第一标识符与第二标识符之间的字符作为提取的字符串的步骤包括:
依次获取所述左侧中括号的字符后面的字符作为待分析字符,
判断所述待分析字符是否为右侧中括号的字符;
在所述待分析字符为右侧中括号的字符且所述待分析字符的后面一个字符为单引号时,将所述左侧中括号的字符后面的字符与所述右侧中括号的字符之间的字符作为提取的字符串。
进一步地,所述第一标识符为表征左侧大括号的字符,所述第二标识符为表征右侧大括号的字符时,
所述将所述第一标识符与第二标识符之间的字符作为提取的字符串的步骤包括:
依次获取所述左侧大括号的字符后面的字符作为待分析字符,
判断所述待分析字符是否为右侧大括号的字符;
在所述待分析字符为右侧大括号的字符且所述待分析字符的后面一个字符为单引号时,将所述左侧大括号的字符后面的字符与所述右侧大括号的字符之间的字符作为提取的字符串。
进一步地,所述第一标识符为表征左侧角括号的字符,所述第二标识符为表征右侧角括号的字符时,
所述将所述第一标识符与第二标识符之间的字符作为提取的字符串的步骤包括:
依次获取所述左侧角括号的字符后面的字符作为待分析字符,
判断所述待分析字符是否为右侧角括号的字符;
在所述待分析字符为右侧角括号的字符且所述待分析字符的后面一个字符为单引号时,将所述左侧角括号的字符后面的字符与所述右侧角括号的字符之间的字符作为提取的字符串。
进一步地,所述第一标识符及第二标识符均为字母字符时,
所述将所述第一标识符与第二标识符之间的字符作为提取的字符串的步骤包括:
依次获取所述字母字符后面的字符作为待分析字符,
判断所述待分析字符是否为字母字符;
在所述待分析字符为字母字符且所述待分析字符的后面一个字符为单引号时,将所述第一标识符与第二标识符之间的字符作为提取的字符串。
本发明还提供一种查询语句的字符串处理装置包括:
判断模块,用于在对SQL查询语句的字符串处理时,判断当前字符是否为英文字母q;在当前字符是否为英文字母q时,继续判断下一字符是否为单引号字符;
处理模块,用于在下一字符为单引号字符时,将所述单引号字符后面的第一个字符作为第一标识符;将所述第一标识符与第二标识符之间的字符作为提取的字符串,所述第二标识符位于第一标识符之后,所述第二标识符后面的第一个字符为单引号字符;其中,当所述第一字符为用于表征左侧括号的字符时,所述第二标识符为所述第一字符对应的右侧括号的字符;当所述第一字符为用于字母字符时,所述第二标识符与所述第一字符相同。
进一步地,所述第一标识符为表征左侧小括号的字符,所述第二标识符为表征右侧小括号的字符;或者,所述第一标识符为表征左侧中括号的字符,所述第二标识符为表征右侧中括号的字符;或者,所述第一标识符为表征左侧大括号的字符,所述第二标识符为表征右侧大括号的字符;或者,所述第一标识符为表征左侧角括号的字符,所述第二标识符为表征右侧角括号的字符;或者,所述第一标识符及第二标识符均为相同的字母字符。
第三方面,本发明还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上所述的查询语句的字符串处理方法。
第四方面,本发明还提供一种计算机设备,其包括:一个或多个处理器;存储装置,用于存储一个或多个程序;当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现上所述的查询语句的字符串处理方法。
本发明查询语句的字符串处理方法及装置提供了一种新的字符串定义方式,让字符串起止符号更加灵活,而且字符串更加直观。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为根据本发明示例性第一实施例的查询语句的字符串处理方法的流程图。
图2为根据本发明示例性第二实施例的查询语句的字符串处理方法的流程图。
图3为根据本发明示例性第三实施例的查询语句的字符串处理方法的流程图。
图4为根据本发明示例性第四实施例的查询语句的字符串处理方法的流程图。
图5为根据本发明示例性第五实施例的查询语句的字符串处理方法的流程图。
图6为根据本发明示例性第六实施例的查询语句的字符串处理方法的流程图。
图7为根据本发明示例性第七实施例的查询语句的字符串处理方法的流程图。
图8为根据本发明示例性第八实施例的查询语句的字符串处理装置的结构框图。
具体实施方式
下面结合附图对本发明实施例进行详细描述。
需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合;并且,基于本公开中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
需要说明的是,下文描述在所附权利要求书的范围内的实施例的各种方面。应显而易见,本文中所描述的方面可体现于广泛多种形式中,且本文中所描述的任何特定结构及/或功能仅为说明性的。基于本公开,所属领域的技术人员应了解,本文中所描述的一个方面可与任何其它方面独立地实施,且可以各种方式组合这些方面中的两者或两者以上。举例来说,可使用本文中所阐述的任何数目个方面来实施设备及/或实践方法。另外,可使用除了本文中所阐述的方面中的一或多者之外的其它结构及/或功能性实施此设备及/或实践此方法。
图1为根据本发明示例性第一实施例的查询语句的字符串处理方法的流程图,如图1所示,本发明一种查询语句的字符串处理方法,包括:
步骤101:在对SQL查询语句的字符串处理时,判断当前字符是否为英文字母q;
步骤102:在当前字符是否为英文字母q时,继续判断下一字符是否为单引号字符;
步骤103:在下一字符为单引号字符时,将所述单引号字符后面的第一个字符作为第一标识符;
步骤104:将所述第一标识符与第二标识符之间的字符作为提取的字符串,所述第二标识符位于第一标识符之后,所述第二标识符后面的第一个字符为单引号字符;其中,当所述第一字符为用于表征左侧括号的字符时,所述第二标识符为所述第一字符对应的右侧括号的字符;当所述第一字符为用于字母字符时,所述第二标识符与所述第一字符相同。
本实施例为了避免字符串用单括号【”】包起来时,遇到字符【'】时,需要处理转义问题,定义一种q'的特殊方式:
a.字符串的开始字符为q'c,字符串的结束字符为c'。c为可见字符。
b.字符串的开始字符为q'c,字符串的结束字符为d'。c和d是一对括号,可以是小括号【(】与【)】、中括号【[】】与【]】、大括号【{】】与【}】、角括号【<】】与【>】。
例如需要插入字符串a'b'c的SQL字符串
insert into a(id,info)values(1,'a”b”c');
可以有多种写法:
insert into a(id,info)values(1,q'aa'b'ca');
insert into a(id,info)values(1,q'ba'b'cb');
insert into a(id,info)values(1,q'');
insert into a(id,info)values(1,q'[a'b'c]');
……
通过这种灵活的字符串开始结束符号,避免在字符串中加入各种复杂的转义字符让字符串的处理更加简单,看起来更加直观。
图2-7为根据本发明示例性第二实施例至第七实施例的查询语句的字符串处理方法的流程图。其中图2为总体流程示意图,具体如图2所示,查询语句的字符串处理方法包括:
a.词组处理开始,获取第一个字符,若第一个字符不是【q】,则走原来词组处理流程;
b.若第一个字符是【q】,则判断下一个字符是否为【'】;若不是,则走原来词组处理流程;否则进入【q'】字符串处理流程;
c.【q'】字符串处理流程,获取【q'】后的第一个字符c:
d.如果字符变量c为左括号【<([{】中的一个,则进入相应的流程分支。否则直接进入【q'c】字符串处理子流程。
图3-图7分别对应各种具体字符的字符串处理方法的流程图。具体如图3所示,q'<开始的字符串逻辑:
a.获取一个字符变量d,判断字符是否为【>】;若不是,把字符d加入字符串s尾端,继续获取下一个字符重复a步骤;
b.如果字符变量d是【>】,则继续获取下一个字符变量e,判断字符是否为【'】;若不是,把字符d及字符e都加入字符串s尾端,继续获取下一个字符重复a步骤;
c.如果字符变量e是【'】,则返回字符串s,进入下一个词组处理流程。
如图4所示,q'(开始的字符串逻辑:
a.获取一个字符变量d,判断字符是否为【)】;若不是,把字符d加入字符串s尾端,继续获取下一个字符重复a步骤;
b.如果字符变量d是【)】,则继续获取下一个字符变量e,判断字符是否为【'】;若不是,把字符d及字符e都加入字符串s尾端,继续获取下一个字符重复a步骤;
c.如果字符变量e是【'】,则返回字符串s,进入下一个词组处理流程。
如图5所示,q'[开始的字符串逻辑:
a.获取一个字符变量d,判断字符是否为【]】;若不是,把字符d加入字符串s尾端,继续获取下一个字符重复a步骤;
b.如果字符变量d是【]】,则继续获取下一个字符变量e,判断字符是否为【'】;若不是,把字符d及字符e都加入字符串s尾端,继续获取下一个字符重复a步骤;
c.如果字符变量e是【'】,则返回字符串s,进入下一个词组处理流程。
如图6所示,q'{开始的字符串逻辑:
a.获取一个字符变量d,判断字符是否为【}】;若不是,把字符d加入字符串s尾端,继续获取下一个字符重复a步骤;
b.如果字符变量d是【}】,则继续获取下一个字符变量e,判断字符是否为【'】;若不是,把字符d及字符e都加入字符串s尾端,继续获取下一个字符重复a步骤;
c.如果字符变量e是【'】,则返回字符串s,进入下一个词组处理流程。
如图7所示,q'c开始的字符串逻辑:
a.获取一个字符变量d,判断字符变量d是否与字符变量c相等;若不是,把字符d加入字符串s尾端,继续获取下一个字符重复a步骤;
b.如果字符变量d与字符变量c相等,则继续获取下一个字符变量e,判断字符是否为【'】;若不是,把字符d及字符e都加入字符串s尾端,继续获取下一个字符重复a步骤;
c.如果字符变量e是【'】,则返回字符串s,进入下一个词组处理流程。
以上实施例通过【q'】字符串处理流程之后,字可以有效的避免转义字符的复杂处理,让SQL字符串更加简单直观,处理效率更加高。
图8为根据本发明示例性第八实施例的查询语句的字符串处理装置的结构框图。图1至图7所示实施例可以适用于本实施例,具体如图8所示,查询语句的字符串处理装置包括:
判断模块801,用于在对SQL查询语句的字符串处理时,判断当前字符是否为英文字母q;在当前字符是否为英文字母q时,继续判断下一字符是否为单引号字符;
处理模块802,用于在下一字符为单引号字符时,将所述单引号字符后面的第一个字符作为第一标识符;将所述第一标识符与第二标识符之间的字符作为提取的字符串,所述第二标识符位于第一标识符之后,所述第二标识符后面的第一个字符为单引号字符;其中,当所述第一字符为用于表征左侧括号的字符时,所述第二标识符为所述第一字符对应的右侧括号的字符;当所述第一字符为用于字母字符时,所述第二标识符与所述第一字符相同。
具体地,所述第一标识符为表征左侧小括号的字符,所述第二标识符为表征右侧小括号的字符;或者,
所述第一标识符为表征左侧中括号的字符,所述第二标识符为表征右侧中括号的字符;或者,
所述第一标识符为表征左侧大括号的字符,所述第二标识符为表征右侧大括号的字符;或者,
所述第一标识符为表征左侧角括号的字符,所述第二标识符为表征右侧角括号的字符;或者,
所述第一标识符及第二标识符均为相同的字母字符。
本发明还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述的查询语句的字符串处理方法。
本发明还提供一种计算机设备,其包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现上述的查询语句的字符串处理方法。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
- 查询语句的字符串处理方法及装置
- 字符串处理装置、字符串处理方法和成像装置