【问题标题】:removing characters from field in MS Access database table从 MS Access 数据库表中的字段中删除字符
【发布时间】:2012-04-20 16:25:55
【问题描述】:

使用 MS Access 2010。 我在表中有一个字段,其中包含用引号括起来的 Windows 路径名,如下所示

"C:\My Documents\Photos\img1.jpg"
"C:\My Documents\Photos\products\gizmo.jpg"
"C:\My Documents\Photos\img5.jpg"

等等。

我需要去掉引号,所以列看起来像这样:

C:\My Documents\Photos\img1.jpg
C:\My Documents\Photos\products\gizmo.jpg
C:\My Documents\Photos\img5.jpg

有没有办法编写更新查询来做到这一点? 或者有更好的方法来完成它?

【问题讨论】:

    标签: ms-access sql-update


    【解决方案1】:

    如果您将在 Access 会话中使用 Access 2000 或更高版本执行此操作,则可以在更新查询中使用 Replace() 函数来删除引号。删除意味着用空字符串替换它们。

    UPDATE YourTable
    SET path_field = Replace(path_field, '"', '');
    

    如果这些路径字符串中的任何一个可能包含引号它们(糟糕!),请考虑Mid() 函数...要求它从第二个字符开始(跳过前导引号),并返回相当于Len(path_field) - 2的字符数

    UPDATE YourTable
    SET path_field = Mid(path_field, 2, Len(path_field) - 2);
    

    无论哪种方式,您都可能希望包含一个 WHERE 子句来忽略没有 path_field 值的行。

    WHERE Len(path_field) > 0
    

    如果在添加新数据时必须再次执行此操作,请使用不同的 WHERE 子句以确保仅更新 path_field 值以引号开头和结尾的行。

    WHERE path_field Like '"*"'
    

    那是使用 * 通配符作为 Access 的默认 ANSI 89 模式。如果您要从 ADO(ANSI 92 模式)执行此操作,请使用 % 通配符。

    WHERE path_field Like '"%"'
    

    ...或者在任一模式下使用ALike 和% 通配符。

    WHERE path_field ALike '"%"'
    

    【讨论】:

    • 旁白:我看到你已经加入了,他们,独家俱乐部。恭喜:)
    【解决方案2】:

    其他人已经提到的REPLACE 的解决方案有效,但会删除所有引号,即使它们位于字符串的中间。

    如果您只想删除开头或结尾的引号,但在字符串中间保留引号原样,您可以通过以下两个查询来完成:

    如果是引号,则删除第一个字符:

    update YourTable
    set YourField = right(YourField, len(YourField) - 1)
    where left(YourField, 1) = '"'
    

    如果是引号,则删除最后一个字符:

    update YourTable
    set YourTable = left(YourField, len(YourField) - 1)
    where right(YourField, 1) = '"'
    

    【讨论】:

    • 这可能是最好的选择,因为它说明引号字符位于字符串的中间。我不认为我有这些,但记住这一点很好。
    • 问题 - 知道 YourTable,YourField 是我的字段和表名,为什么在删除左侧字符时使用 set YourField = ..... 但在删除时使用 set location = ...正确的字符?
    • @maneesha:哎呀......“位置”是一个错字,我刚刚在我的回答中更正了它。我懒得创建一个新表来测试我的查询,所以我使用了一个现有的表,其中有一列名为“location”。当我在此处的答案中从 Access 复制查询时,我只是忘记替换一个“位置”:-)
    • @HansUp:这取决于:-) 一方面,我的解决方案有两个查询,而您的只有一个。另一方面,当开头 结尾只有一个引号时,我的解决方案效果更好。但我不认为这里是这种情况(这个问题听起来两个地方总是有引号),所以你的答案更优雅。
    • 我明白你的观点。如果提问者提供包含他们需要处理的所有变化的样本数据,这将简单得多。 :-0
    【解决方案3】:

    要使其成为永久更改,您可以运行如下所示的更新查询:

    UPDATE [Your Table]
    SET [Your Table].[Your Field] = Replace([Your Table].[Your Field],"""","")
    

    这将删除 所有 引号,即使它们不在开头或结尾。如果这不是您想要的,请发回。

    【讨论】:

      【解决方案4】:

      假设你的列名是 MyColumn,表名是 MyTable,你可以使用这个 sql 更新你的数据来去掉引号。

      UPDATE MyTable
      SET MyColumn = REPLACE(MyColumn,'"','')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-12-02
        • 1970-01-01
        • 2011-08-29
        • 1970-01-01
        • 1970-01-01
        • 2015-11-16
        • 1970-01-01
        相关资源
        最近更新 更多