SQL中WHERE子句中可以利用LIKE来匹配相似的数据项,当时我得到的结论是可以使用"%"来匹配字符串,在SPUFI中使用,的确可以得到字符串匹配的效果。如:
SELECT * FROM TEST
WHERE TESTID LIKE "CZX%";
上面这句在SPUFI中提交执行后,就可以将TEST表中所有TESTID中所有以"CZX"字符串开头的项都找到。
然而,在COBOL中执行嵌入的SQL语句的时候,"%"就只能匹配一个或空的字符了,如:
EXEC SQL
SELECT * FROM TEST
WHERE TESTID LIKE "CZX%"
END-EXEC.
就只能查询出以"CZX"开头的且最后长度不超过4的项。
一开始的时候我并没有注意到这个问题,因此,在匹配字符串的时候,老是查询不到预期的数据。当我最终发现这个问题的时候,也没找到该用什么符号来匹配字符串,最后,想了一个利用"%"来完成字符串匹配的方法:
1、声明一个字符串匹配的变量,长度为数据库中要匹配项长度+2,如:TESTID-FILTER全部存放"%";
2、将从终端获得的筛选字符串,如TESTID-INPUT去掉空格后,插入到1中定义的变量的第二位;
3、得到字符串TESTID-FILTER就是用在LIKE中匹配字符串的宿主变量了。
也就是说,将终端得到的数据变成形如"%*******%%%%%%%%%%"这样的匹配字符串,用于数据库的查询。这样,就可以成功的实现查询数据库中该项包含"******"字符串的所有项。