3

TABLEA の列の値のいずれかが末尾のスペースで構成されているかどうかを確認するにはどうすればよいですか? すべてではなく、1 つの列の末尾にスペースがあるかどうかを確認する方法しか知りません。

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

テーブルに 45 列あるので、where 句ですべてを指定するのは非常に面倒です。現在、タブを使用して手動で行っています-列と行を調べていますが、より良い提案はありますか?

前もって感謝します

4

3 に答える 3

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 に答える
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

テキスト列のいずれかに1つ以上の末尾のスペースが含まれているすべての行を表示する場合はWHERE、関数によって返されるフィールド名を参照する句を持つクエリを作成できColumnsWithTrailingSpaces()ます。

SELECT *
FROM TABLEA
WHERE
       Right(Col1,  1) = ' '
    OR Right(Col9,  1) = ' '
    OR Right(Col42, 1) = ' '

それらの提案のどれもあなたが望むものをあなたに与えないならば、あなたが望むものを明確にしてください。;-)

于 2013-01-28T07:01:21.613 に答える
0

私の知る限り、それを行う唯一の方法は、すべての列を指定することです:

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

提案: テーブル定義 (CREATE TABLEステートメント) をテキスト エディターにコピーし、魔法の検索置換を行ってステートメントを作成します。

于 2013-01-28T04:27:23.747 に答える