3

如何检查 TABLEA 中列的任何值是否包含尾随空格?我只知道如何检查一列是否有尾随空格,但不是全部。

       SELECT *  
       FROM TABLEA
       WHERE Col1 LIKE ('* ');  

由于我的表中有 45 列,因此在 where 子句中指定所有列将非常累人。目前我正在通过列和行的选项卡手动进行操作,有更好的建议吗?

提前致谢

4

3 回答 3

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) = ' '

如果这些建议都没有给你你想要的,请澄清你想要什么。;-)

于 2013-01-28T07:01:21.613 回答
2

对所有列执行 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)
于 2013-01-28T04:34:15.063 回答
0

AFAIK 唯一的方法是指定所有列:

SELECT *
FROM TABLEA
WHERE Col1 LIKE ('* ')
OR Col2 LIKE ('* ')
OR ...

建议:将表定义(CREATE TABLE语句)复制到文本编辑器并执行一些神奇的搜索替换来创建语句。

于 2013-01-28T04:27:23.747 回答