替换 FoxPro 查询中的子字符串

Replace substring in FoxPro query

我一直试图在网上找到一些有关 FoxPro 查询的帮助,但似乎很难。我发现最接近我的问题的是:Find a Specific Character in a Field and Replace it with a Phrase,但这不是我需要的一切。

我有一个 FoxPro 数据库,我们需要通过替换一个词来更改某些记录的一些描述。

我知道怎么做 SQL;

UPDATE cname 
SET cname.cn_desc = REPLACE(cname.cn_desc, 'lw', 'lightweight') 
WHERE cname.cn_cat = 'Q'

但我不知道如何在 VFP 中复制它。我试过了

REPLACE cname.cn_desc WITH STRTRAN(cname.cn_desc, 'lw', 'lightweight') WHERE (cname.cn_cat='Q')

但只是 returns 无法识别的关键字

update cname where cn_cat = "Q" set cn_desc = strtran(cn_desc, "lw", "lightweight", 1, 1, 1)

后三个参数表示替换第一次出现的"lw",只替换一次出现的"lw",不区分大小写。

请注意,如果扩展值超过 40 个字符的字段长度,我知道 cn_desc 是 ;),那么它将被截断。

如果你知道如何在 SQL 中做到这一点,那么为什么不简单地使用 SQL,除了将函数 replace() 更改为 VFP 特定的东西(记住函数主要是特定于后端的,它们被使用而不是 ANSI SQL).

的一部分
UPDATE cname 
SET cname.cn_desc = strtran(cname.cn_desc, 'lw', 'lightweight') 
WHERE cname.cn_cat = 'Q'

当您尝试使用 xBase 命令而不是 SQL 执行相同操作时,您需要使用 'for' :

而不是 'where'
REPLACE cname.cn_desc WITH STRTRAN(cname.cn_desc, 'lw', 'lightweight') for (cname.cn_cat='Q')

IOW 你的两次尝试都非常接近。