0

这与 MS Access 2016 有关。我有一个名为Name的字段,其中有一个长字符串。Name字段中的每条记录都有一个年份和一些字符串。例如,年份总是在括号中提及。

杰克丁的死女故事 (1987)

3 天的 necro (2007) 在水上

ETC...

我想创建另一个名为year的字段,我只想在其中自动添加该记录的年份。我还想从每条记录的名称字段中删除包括年份信息在内的所有内容。所以在上面的例子中,我想从各自的记录中删除字符串 ' (1987) by Jack Ding ' 和 ' (2007) on water '。

我知道我可以只键入它或从名称复制/粘贴信息到年份,但我有 4000 多条记录,我想构建一个查询或表达式或宏或其他任何东西(我真的不知道是什么),只需要一年名称字段中的信息并将其自动放入年份字段中,并删除名称字段中提到的年份之后的所有内容(包括年份本身)

任何帮助都会得到帮助

谢谢

4

1 回答 1

1

您可以在 sql 或 vba 中使用它,但假设任何单个字符串中只有一个左括号,则此表达式应输出正确的值(尽管如果有多个,则有解决方法):

MID([Name],InStr(1,[Name],"(")+1,4)

InStr函数搜索[Name]一个开括号并返回该字符在字符串中的位置。Mid从字符串中提取指定数量的字符,但您必须告诉它从字符串的哪个位置开始。将它们嵌套在一起,InStr告诉Mid从第一个开放括号的位置开始提取,+1 字符,这应该是年份的第一个数字。然后Mid从该起点获取 4 位数字并返回字符串。

如果您的year字段是日期数据类型,您可以通过包装它来改进表达式CDate,将字符串转换为日期数据类型。

您可以使用此表达式编写UPDATE查询,将每条记录的年份添加到year表中的字段中:

UPDATE MyTableWithName&Year
SET Year = CDate(MID([Name],InStr(1,[Name],"(")+1,4));

编辑:我错过了你问题的删除部分。如您所见,InStr可用于识别您的第一个打开括号的位置,因此可以与该函数以相同的方式使用该LEFT函数来截断除标题之外的所有内容。所以表达式会是这样的:

LEFT([Name],InStr(1,[Name],"(")-1)

然后,您可以在第二个UPDATE查询中使用它(我会连续执行这些操作,因为我们不想在提取年份之前截断)SQL 代码将是:

UPDATE MyTableWithName&Year
SET Name = LEFT([Name],InStr(1,[Name],"(")-1);
于 2016-05-03T20:39:31.457 回答