在informix中将一个引号符号替换为两个引号
Posted
技术标签:
【中文标题】在informix中将一个引号符号替换为两个引号【英文标题】:replace one quote symbol into two quotes in informix 【发布时间】:2013-10-25 09:43:18 【问题描述】:我正在开发informix-4gl。我的程序即将从一个表添加和更新用户信息到多个表。如果用户的信息包含“'”符号或单引号,例如购买者姓名或用户地址。我的问题是当我更新表格时,包含单引号符号的信息不会更新。现在我发现必须有双引号才能输入不同在线服务器中的值。现在,我我打算将单引号更改为双引号。我曾尝试更改这样的代码,但它只读取单引号。
LET rmks_lgth = LENGTH(p_crsell.crse_purc_nme)
FOR a = 1 TO rmks_lgth
IF p_crsell.crse_purc_nme[a] = "'" THEN
LET p_crsell.crse_purc_nme[a] = "''"
END IF
END FOR
我曾尝试更改代码以生成双引号。对于每个包含“'”引号符号的输入,引号必须加倍。
LET rmks_lgth = LENGTH(p_crsell.crse_purc_nme)
FOR a = 1 TO rmks_lgth
FOR b = 1 TO rmks_lgth
IF p_crsell.crse_purc_nme[a] = "'" THEN
LET p_crsell.crse_purc_nme[a] = "'"
LET p_crsell.crse_purc_nme[b] = "'"
END IF
END FOR
END FOR
上面的代码只会产生输出
''
没有其他值的地方。 有人命名 ceinmark 建议“我需要创建一个 4GL 函数来找到引号,然后在找到它的位置将字符串一分为二,并将“新”引号与字符串的这两个部分连接起来。”
【问题讨论】:
【参考方案1】:Rahim,以下解决方案仅适用于 4GL 代码,不适用于 Informix SQL 语句。 这可以很容易地重写为 Informix 存储过程(但我知道作为 SP,这不会解决您的问题):
MAIN
DEFINE p_sql varCHAR(200)
DEFINE p_dest varCHAR(200)
DEFINE i,x,z INTEGER
LET p_sql = arg_val(1)
LET x=1
LET p_dest=''
FOR i = 1 TO length(p_sql)
IF p_sql[i,i] = '"' THEN
LET p_dest=p_dest,p_sql[x,i],'"'
LET x=i+1
END IF
END FOR
LET i=length(p_sql)
IF x < i THEN
LET p_dest=p_dest,p_sql[x,i]
END IF
DISPLAY p_sql
DISPLAY p_dest
END MAIN
测试结果:
$ fglgo x "test 'one' "
test 'one'
test 'one'
$ fglgo x 'test "one" '
test "one"
test ""one""
$ fglgo x 'test "one"'
test "one"
test ""one""
$ fglgo x 'test "one" x'
test "one" x
test ""one"" x
【讨论】:
嗨 Ceinmart ,我想问一下.. LET p_sql = arg_val(1) 的功能是什么? 引用自 4GL 参考手册,您可以在其中免费下载here:The ARG_VAL( ) function returns a specified argument from the command line that invoked the current4GLapplication program. It can also return the name of the current4GLprogram
谢谢 ceinmart,你的回答和我在互联网上的谷歌一样。我认为它有另一个功能。好的,非常感谢..以上是关于在informix中将一个引号符号替换为两个引号的主要内容,如果未能解决你的问题,请参考以下文章