代码之家  ›  专栏  ›  技术社区  ›  Richard

替换FoxPro查询中的子字符串

  •  0
  • Richard  · 技术社区  · 6 年前

    我一直试图在网上找到一些关于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')
    

    但这只会返回无法识别的关键字

    2 回复  |  直到 6 年前
        1
  •  3
  •   Alan B    6 年前
    update cname where cn_cat = "Q" set cn_desc = strtran(cn_desc, "lw", "lightweight", 1, 1, 1)
    

    最后三个参数表示替换第一个出现的“lw”,仅替换一个出现的“lw”,并且不区分大小写。

    请注意,如果扩展值超过40个字符的字段长度,我知道cn\u desc;)然后它将截断它。

        2
  •  0
  •   Cetin Basoz    6 年前

    如果您知道如何在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')
    

    看来你两次都很接近。