如何检查我的表中列的任何值是不是包含 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 中另一个表中列的每个不同值

表中列的唯一值组合

如何计算表中列的每个值?

是否有任何其他选项可以从表中获取总计数和同一查询中列的不同计数?

Toad 问题:Oracle 类型作为显示所有记录的表中列的数据类型

如何跟踪数据库表中列的位置