如何检查我的表中列的任何值是不是包含 MS ACCESS 2003 中的尾随空格?
Posted
技术标签:
【中文标题】如何检查我的表中列的任何值是不是包含 MS ACCESS 2003 中的尾随空格?【英文标题】:How to check if any value of the columns in my table consist trailing spaces in MS ACCESS 2003?如何检查我的表中列的任何值是否包含 MS ACCESS 2003 中的尾随空格? 【发布时间】:2013-01-28 04:23:51 【问题描述】:如何检查 TABLEA 中列的任何值是否包含尾随空格? 我只知道如何检查一列是否有尾随空格,但不是全部。
SELECT *
FROM TABLEA
WHERE Col1 LIKE ('* ');
由于我的表中有 45 列,在 where 子句中指定所有列会很累人。目前我正在通过列和行进行手动操作,有更好的建议吗?
提前致谢
【问题讨论】:
【参考方案1】:对所有列进行 RTrim 并将它们插入回去
Select RTrim(Col1) As TrimmedCol1, Rtrim(Col2) As TrimmedCol2,. . . .
From TABLEA
如果你有一个计数器作为主键,你可以将结果插入同一个表并删除原始值。如果没有,最好的方法是将这些值插入到临时表中。
INSERT INTO TempTable (Col1, Col2,....)
Select RTrim(Col1) As TrimmedCol1, Rtrim(Col2) As TrimmedCol2,. . . .
From TABLEA
如果您只想获取带有尾随空格的行,您可以这样做:
SELECT * FROM TableA
WHERE
Col1 <> RTrim(Col1) OR
Col2 <> RTrim(Col2) OR
...
Col44 <> RTrim(Col44)
【讨论】:
@ta.speot.is,你说得对,我正在四处走动并假设 lc。不想要尾随空格。 您的答案与实际答案相差不远,因此您可以编辑它吗? @ta.speot.is,你想到了什么... Col1 RTrim(Col1)? 这就像我在 where 子句中用 LIKE 指定 45 列一样乏味,还有其他建议吗?我只需要检查一下。这是我正在做的一个数据一致性检查过程 谢谢,您唯一的其他选择(我能想到的)是编写一个 VBA 脚本以递归方式遍历每条记录,但除非您有十几个表左右,否则它不会值得努力。我家里没有 Access,所以我不能试试这个,但是你有没有试过只为“*”做一个 Ctrl-F?【参考方案2】:我不确定您到底想要什么。如果您只需要其值包含尾随空格的文本列的名称,则可以使用自定义 VBA 函数。
我在 tblFoo
表的 2 列中的值中添加了尾随空格。使用下面的函数,我可以在立即窗口中获得这些列的名称。
? ColumnsWithTrailingSpaces("tblFoo")
some_text, Trans Type
Public Function ColumnsWithTrailingSpaces(ByVal pTable As String) As String
Dim db As DAO.database
Dim fld As DAO.Field
Dim strReturn As String
Set db = CurrentDb
For Each fld In db.TableDefs(pTable).Fields
Select Case fld.Type
Case dbText, dbMemo
If DCount("*", pTable, _
"Right([" & fld.Name & "], 1) = ' '") > 0 Then
strReturn = strReturn & ", " & fld.Name
End If
Case Else
'pass
End Select
Next fld
Set fld = Nothing
Set db = Nothing
If Len(strReturn) > 0 Then
strReturn = Mid(strReturn, 3)
End If
ColumnsWithTrailingSpaces = strReturn
End Function
如果您还想丢弃尾随空格,可以通过修改函数来实现,使其创建并执行 UPDATE
语句(而不是仅将字段名称添加到 strReturn
)。
strUpdate = "UPDATE [" & pTable & "]" & vbCrLf & _
"SET [" & fld.Name & "] = RTrim([" & fld.Name & "]);"
db.Execute strUpdate, dbFailOnError
如果您想查看任何文本列包含一个或多个尾随空格的所有行,您可以构建一个查询,其WHERE
子句引用ColumnsWithTrailingSpaces()
函数返回的字段名称。
SELECT *
FROM TABLEA
WHERE
Right(Col1, 1) = ' '
OR Right(Col9, 1) = ' '
OR Right(Col42, 1) = ' '
如果这些建议都没有满足您的需求,请说明您的需求。 ;-)
【讨论】:
【参考方案3】:AFAIK 的唯一方法是指定所有列:
SELECT *
FROM TABLEA
WHERE Col1 LIKE ('* ')
OR Col2 LIKE ('* ')
OR ...
建议:将表定义(CREATE TABLE
语句)复制到文本编辑器并执行一些神奇的搜索替换来创建语句。
【讨论】:
这是肯定的做法,但它非常乏味。让我去寻找更简单的方法,否则你的肯定是答案以上是关于如何检查我的表中列的任何值是不是包含 MS ACCESS 2003 中的尾随空格?的主要内容,如果未能解决你的问题,请参考以下文章
如何将一个表中列的每个不同值映射到 Hive 中另一个表中列的每个不同值
是否有任何其他选项可以从表中获取总计数和同一查询中列的不同计数?