【问题标题】:Replace substring in FoxPro query替换 FoxPro 查询中的子字符串
【发布时间】:2018-03-08 13:57:00
【问题描述】:

我一直在尝试在线查找有关 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')

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

【问题讨论】:

    标签: visual-foxpro foxpro


    【解决方案1】:
    update cname where cn_cat = "Q" set cn_desc = strtran(cn_desc, "lw", "lightweight", 1, 1, 1)
    

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

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

    【讨论】:

      【解决方案2】:

      如果您知道如何在 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,你在两次尝试中都非常接近。

      【讨论】:

        猜你喜欢
        • 2011-10-05
        • 2014-07-03
        • 1970-01-01
        • 2014-11-22
        • 2023-02-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多