首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HP/Tandem TACL如何在SQL like子句中使用%作为值

HP/Tandem TACL如何在SQL like子句中使用%作为值
EN

Stack Overflow用户
提问于 2018-08-30 21:09:37
回答 1查看 504关注 0票数 0

在我的TACL中,我尝试创建一个变量作为SQLCI命令的输入。我想使用带有%的LIKE子句作为通配符。每次将%替换为?导致SQL语句不返回所需的结果。

Code snippitz:

代码语言:javascript
复制
 ?TACL macro
 #Frame
 #Set #informat plain
 #Set #outformat pretty
 #Push stoprun DC fidata var1 mailmast sqlvol sqlsvol IsOpen EMLFile ans emlline
 #Push mailfile mfile likeit charaddr sqlin sqlout test
 [#Def True text |body|-1]
 [#Def False text |body|0]

为减少长度而裁剪的中间代码-裁剪代码可以工作

代码语言:javascript
复制
 == select <program name> from <full mailmast filename> where mm_file_prefix
 == like "<likename>%" for browse access;
 [#If Not [StopRun]
 |then|
   #Setv test "~%"
   #Set #trace -1
   #Set SqlIn select mm_program_name from [mailmast] where mm_file_prefix
   #appendv sqlin "like ""[LikeIt]~%"" for browse access;"
   SQLCI/Inv Sqlin,outv sqlout/
 ] == end of if

当我运行代码时,我显示了变量,它将%替换为?

-TRACE- -19-st 1 v调用变量:MAILMAST.1 #Set sqlin select mm_program_name from $DATA5.SQL2510.MAILMAST where mm_file_p refix -TRACE- -20- #appendv SqlIn "like ""LikeIt ^ -TRACE- -20-调用变量:LIKEIT.1 #appendv sqlin "like ""ED?"“用于浏览访问;“-TRACE- -20-d test?-22-st 1 v SQLCI/Inv Sqlin,outv sqlout/ -TRACE- -23-d sqlin选择mm_program_name from $DATA5.SQL2510.MAILMAST where mm_file_prefix like "ED?”用于浏览访问;-24-

由于%不是通配符,因此此SQL语句无法显示正确的记录。

问题是,如何将%放入TACL变量而不将其更改为a?

编辑以将重复代码替换为TACL宏的开头- MEH

EN

回答 1

Stack Overflow用户

发布于 2018-08-31 02:14:36

我真的不喜欢回答我自己的问题,因为看起来我只是为了让自己看起来更聪明而设置了一些东西,但在等待的同时继续我的研究,我找到了答案。参见下面的代码片段:

代码语言:javascript
复制
?TACL macro
 #Frame
 #Set #informat plain
 #Set #outformat pretty
 #Push stoprun DC fidata var1 mailmast sqlvol sqlsvol IsOpen EMLFile ans emlline
 #Push mailfile mfile likeit charaddr sqlin sqlout test
 [#Def True text |body|-1]
 [#Def False text |body|0]
 [#Def ascii struct
   Begin
     BYTE byt0 value 37;
     CHAR pcent REDEFINES byt0;
   End;
 ] == end of struct

注意结构的添加。这将能够为一个字节分配一个37 (%)的十进制值,并将其重新定义为要在like语句中使用的字符。

代码语言:javascript
复制
 == select <program name> from <full mailmast filename> where mm_file_prefix
 == like "<likename>%" for browse access;
 [#If Not [StopRun]
 |then|
   #Set test [ascii:pcent]
   #Set #trace -1
   #Set SqlIn select mm_program_name from [mailmast] where mm_file_prefix
   #append sqlin like "[LikeIt][ascii:pcent]" for browse access;
   SQLCI/Inv Sqlin,outv sqlout/
 ] == end of if

注意struct ascii:pcent的用法,这是可行的。

感谢所有读过我问题的人。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52097941

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档