在Db2命令行处理器(CLP)中使用SQL LIKE谓词遇SQL0104N错误求助
解决Db2 CLP中LIKE谓词的SQL0104N错误
这问题我之前帮同事排查过,核心是shell和Db2命令行处理器(CLP)的转义规则冲突导致的。你错误地在双引号包裹的SQL里给%加了反斜杠转义,反而让shell或Db2解析SQL时出现了语法混乱,触发了SQL0104N错误。
给你三个可行的解决办法,按需选择:
方法1:用单引号包裹整个SQL(最推荐)
不管是Unix/Linux的bash/zsh,还是Windows的PowerShell,用单引号把整个SQL包起来,能彻底避免shell解析里面的特殊字符。唯一要注意的是:单引号字符串里的单引号需要用两个单引号来转义,这样Db2才能识别出单个单引号:
db2 'SELECT NAME, PLACE, ANIMAL from ZOOTABLE where NAME like ''TIG%'' or NAME like ''LIO%'''
执行这个命令后,Db2会收到完全符合预期的SQL,LIKE谓词能正常匹配以TIG或LIO开头的NAME。
方法2:用双引号包裹SQL,直接写%不用转义
如果习惯用双引号包裹SQL,其实完全不需要给%加反斜杠——因为%在shell的双引号环境里没有特殊含义,shell会原封不动地把单引号和%传给Db2:
db2 "SELECT NAME, PLACE, ANIMAL from ZOOTABLE where NAME like 'TIG%' or NAME like 'LIO%'"
这个写法更简洁,也能解决你的错误。
方法3:补充场景:如果要匹配含%的实际字符串
如果你其实是想匹配NAME里包含%字符的记录(而不是用%做通配符),那才需要用转义字符,此时要显式指定ESCAPE子句:
db2 "SELECT NAME, PLACE, ANIMAL from ZOOTABLE where NAME like 'TIG\%%' ESCAPE '\'"
这里ESCAPE '\'告诉Db2用\作为转义符,\%%表示匹配实际的%字符——不过这不是你当前的问题场景,只是给你做个补充。
执行上面前两种方法的命令,应该就能正常返回你想要的查询结果了。
内容的提问来源于stack exchange,提问作者Raja
相关产品推荐
相关产品推荐

