Sql 访问表中的VBA搜索和修复
我在Access数据库中有一个表,其中填入了数据。它是在25年内填写的,因此存在不一致之处 但有一列是可以的。我想用这个列来修复另一列中的数据。样本如下:Sql 访问表中的VBA搜索和修复,sql,database,vba,ms-access,sql-update,Sql,Database,Vba,Ms Access,Sql Update,我在Access数据库中有一个表,其中填入了数据。它是在25年内填写的,因此存在不一致之处 但有一列是可以的。我想用这个列来修复另一列中的数据。样本如下: Column1 | Column2 ICDS-1 | 01 ICDS-1A | 1A ICDS-2 | 02 ICDS-3 | 3 ICDS-4A | 04 OTHER | ... 对于Access VBA宏,我要做的只是使用列1中的数据并在连字符处拆分它如果没有连字符,则应
Column1 | Column2
ICDS-1 | 01
ICDS-1A | 1A
ICDS-2 | 02
ICDS-3 | 3
ICDS-4A | 04
OTHER |
...
对于Access VBA宏,我要做的只是使用列1
中的数据并在连字符处拆分它如果没有连字符,则应跳过该行:
Column1 | Column2
ICDS | 1
ICDS | 1A
ICDS | 2
ICDS | 3
ICDS | 4A
OTHER |
...
虽然这似乎是一项很简单的任务,我可以在Excel中很快完成,但我似乎无法开始使用Access VBA,即使在谷歌搜索了一段时间之后
或者我完全走错了方向,我应该使用一些SQL查询吗
感谢您的帮助。谢谢
更新:使用OpiesDad回答以下VBA代码(现在使用实际的表名和列名)进行替换,但它不会跳过没有连字符的行(我在上面的问题中更新了这一点):
更新2:已解决,请参阅带有最终查询和VBA代码的OpiesDad答案。您不需要VBA 运行以下SQL:
SELECT Iif(InStr([Column1],"-") = 0, [Column1], left([Column1], InStr([Column1], "-") - 1)) As NewCol1
, Iif(InStr([Column1],"-") = 0, "", right([Column1], Len([Column1]) - InStr([Column1], "-"))) As NewCol2
, [Column1]
, [Column2]
FROM myTable
InStr函数查找您要查找的值,并返回字符串中找到该值的位置(第一个位置是位置1)。Left和Right函数分别从字符串的左侧和右侧返回所选的字符数
这将显示结果(而不是覆盖表)
要覆盖该表,请执行以下操作:
UPDATE myTable
SET Column1 = left([Column1], InStr([Column1], "-") - 1)
, Column2 = right([Column1], Len([Column1]) - InStr([Column1], "-"))
WHERE (InStr([Column1], "-") > 0 )
执行更新查询的VBA代码(使用实际表名和列名):
好的,所以我设法用
DoCmd.RunSQL“UPDATE[MASTER TABLE]SET[SERIES ABB]=Left([SERIES ABB]、InStr([SERIES ABB]、“”-“”)-1)、[#IN SERIES]=right([SERIES ABB]、Len([SERIES ABB])-InStr来应用您的代码。
现在的问题是,Column1没有连字符的行大约有250行。在这些字段中,整个列1
字段移到列2
。但我需要这些行保持原样。请参阅第一部分的更新。使用“IIf”功能。太好了!谢谢你的帮助。一个WHERE
语句解决了这个问题。请参阅您帖子的更新。
UPDATE myTable
SET Column1 = left([Column1], InStr([Column1], "-") - 1)
, Column2 = right([Column1], Len([Column1]) - InStr([Column1], "-"))
WHERE (InStr([Column1], "-") > 0 )
DoCmd.RunSQL
"UPDATE [MASTER TABLE]
SET [SERIES ABB] = Left([SERIES ABB], InStr([SERIES ABB], ""-"") - 1),
[# IN SERIES] = right([SERIES ABB], Len([SERIES ABB]) - InStr([SERIES ABB], ""-""))
WHERE (InStr([SERIES ABB], ""-"") > 0 )"