【问题标题】:How do I compare two strings in Access?如何比较 Access 中的两个字符串?
【发布时间】:2021-11-20 07:32:03
【问题描述】:

我的工作是管理一个允许学生访问课程材料的虚拟学习环境。每个“课程”都有一个特定的 ID(下面的示例 ID)。每个学年都会复制一份新的课程副本,并使用新的 ID 以及从模板中获取的相同内容和属性。

问题

从下面的示例数据中可以看出,当前课程没有设置访客访问属性,这会导致问题。

到目前为止的处理过程

我在 Postgres 中检索了所有 1201 和 1211 课程的完整列表,将它们导出到单独的 Excel 文件中,将它们导入 Access 并创建了与课程 ID 的关系。

这是我用过的Access中的SQL。

SELECT current.external_course_key, current.course_id, current.allow_guest_access
FROM [current]
    INNER JOIN past ON past.external_course_key like current.external_course_key & "*";

我认为 REGEX 会对此有所帮助,但不幸的是,Access 没有这种能力。

要求

我需要检查过去和当前课程 ID 的访客访问属性,并检索存在差异的课程列表。

COURSE ID GUEST ACCESS
I3132-CHEN-10011-1201-1SE-016651 -> Last year's course Y
I3132-CHEN-10011-1211-1SE-016651 -> Current course N

希望我已经详细解释了这一点。如果您需要更多,请不要犹豫。这个问题已经交给我了,是一个高优先级。

感谢任何帮助。

谢谢

【问题讨论】:

  • like 模式不也需要前导 * 吗?而且我还会包括破折号,例如'*-12[0-1]1-*'.
  • 请注意,Access 可以连接到 Postgres 并在 Postgres 上执行直通查询,为您提供正则表达式支持,跳过 Excel 步骤并提供实时数据

标签: sql ms-access string-comparison


【解决方案1】:

我并不完全清楚你想要什么,但我猜你想要以下:

SELECT Current.Course_ID, Current.allow_guest_access
FROM
   Current
INNER JOIN
   Past
ON     (Mid(Current.Course_ID, 1, 17) =  Mid(Past.Course_ID, 1, 17))
   AND (Mid(Current.Course_ID, 22, 11) =  Mid(Past.Course_ID, 22, 11))
   AND (Current.allow_guest_access <> Past.allow_guest_access)

这将提供其属性 allow_guest_access 相对于其等效的过去课程具有不同值的所有当前课程。通过“等效”,我理解(从您显示的两个示例值中)它们应该具有 course_id 的所有数字相同,除了四个不同的中间数字。

如果这不是您想要的,请在评论中澄清,我会相应地编辑此答案。

【讨论】:

  • 非常感谢。这正是我需要做的。非常感谢您的帮助。 :)
猜你喜欢
  • 1970-01-01
  • 2022-06-29
  • 1970-01-01
  • 2022-09-30
  • 2019-01-14
  • 2021-06-18
  • 2014-12-05
  • 2012-02-08
  • 2015-11-01
相关资源
最近更新 更多