如何从我的 ACCESS Table 中删除所有 NA 值?
How do I delete all NA value from my ACCESS Table?
是否存在如下查询:
UPDATE FieldName FROM TableName WHERE FieldName IN('NA') SET FieldName = NULL
事实是 FieldName
可以是任何字段?
例如
Field1
Field2
Field3
Field4
....
Field100
013475
486466
486655
156861
....
15351312
013475
NA
486655
156861
....
15351312
013475
486466
NA
156861
....
NA
013475
486466
486655
NA
....
NA
执行查询后我应该有:
Field1
Field2
Field3
Field4
....
Field100
013475
486466
486655
156861
....
15351312
013475
486655
156861
....
15351312
013475
486466
156861
....
013475
486466
486655
....
请注意,我正在处理访问权限。
必须明确引用每个字段才能更新。
考虑具有 2 个字段的示例:
UPDATE tablename SET Field2 = IIf(Field2 = "NA", Null, Field2),
Field3 = IIf(Field3 = "NA", Null, Field3)
或者,构建 VBA 过程以在循环中对记录集或 运行 重复更新操作语句执行编辑。
否则,开table和运行一次性Find/Replace整个table。
没有。 SQL 中的字段和 table 名称不能是动态的。
使用 DAO 完成这样的任务:
Public Function CleanNa()
Dim Records As DAO.Recordset
Dim Field As DAO.Field
Dim Sql As String
Sql = "Select * From Tablename"
Set Records = CurrentDb.OpenRecordset(Sql)
Records.MoveFirst
While Not Records.EOF
For Each Field In Records.Fields
If Field.Value = "NA" Then
Records.Edit
Field.Value = Null
Records.Update
End If
Next
Records.MoveNext
Wend
Records.Close
End Function
您可以做的一件事是使用一些 VBA 循环字段和 运行 一组更新语句。类似于:
Sub sUpdateData()
Dim db As DAO.Database
Dim tdf As DAO.TableDef
Dim fld As DAO.Field
Dim strSQL As String
Set db = CurrentDb
Set tdf = db.TableDefs("TableName")
For Each fld In tdf.Fields
strSQL = "UPDATE TableName SET [" & fld.Name & "]=NULL WHERE [" & fld.Name & "]='NA';"
db.Execute strSQL
Next fld
Set tdf = Nothing
Set db = Nothing
End Sub
是否存在如下查询:
UPDATE FieldName FROM TableName WHERE FieldName IN('NA') SET FieldName = NULL
事实是 FieldName
可以是任何字段?
例如
Field1 | Field2 | Field3 | Field4 | .... | Field100 |
---|---|---|---|---|---|
013475 | 486466 | 486655 | 156861 | .... | 15351312 |
013475 | NA | 486655 | 156861 | .... | 15351312 |
013475 | 486466 | NA | 156861 | .... | NA |
013475 | 486466 | 486655 | NA | .... | NA |
执行查询后我应该有:
Field1 | Field2 | Field3 | Field4 | .... | Field100 |
---|---|---|---|---|---|
013475 | 486466 | 486655 | 156861 | .... | 15351312 |
013475 | 486655 | 156861 | .... | 15351312 | |
013475 | 486466 | 156861 | .... | ||
013475 | 486466 | 486655 | .... |
请注意,我正在处理访问权限。
必须明确引用每个字段才能更新。
考虑具有 2 个字段的示例:
UPDATE tablename SET Field2 = IIf(Field2 = "NA", Null, Field2),
Field3 = IIf(Field3 = "NA", Null, Field3)
或者,构建 VBA 过程以在循环中对记录集或 运行 重复更新操作语句执行编辑。
否则,开table和运行一次性Find/Replace整个table。
没有。 SQL 中的字段和 table 名称不能是动态的。
使用 DAO 完成这样的任务:
Public Function CleanNa()
Dim Records As DAO.Recordset
Dim Field As DAO.Field
Dim Sql As String
Sql = "Select * From Tablename"
Set Records = CurrentDb.OpenRecordset(Sql)
Records.MoveFirst
While Not Records.EOF
For Each Field In Records.Fields
If Field.Value = "NA" Then
Records.Edit
Field.Value = Null
Records.Update
End If
Next
Records.MoveNext
Wend
Records.Close
End Function
您可以做的一件事是使用一些 VBA 循环字段和 运行 一组更新语句。类似于:
Sub sUpdateData()
Dim db As DAO.Database
Dim tdf As DAO.TableDef
Dim fld As DAO.Field
Dim strSQL As String
Set db = CurrentDb
Set tdf = db.TableDefs("TableName")
For Each fld In tdf.Fields
strSQL = "UPDATE TableName SET [" & fld.Name & "]=NULL WHERE [" & fld.Name & "]='NA';"
db.Execute strSQL
Next fld
Set tdf = Nothing
Set db = Nothing
End Sub