SELECT *
FROM MyTable
WHERE IIF(MyField = ' ', NULL, MyField) IS NULL;
UPDATE: Hier ist ein Beispiel dafür, wie „ANSI padding“ arbeitet in dem Access-Datenbank-Engine (ACE, Jet, was auch immer), die irgendwie notwendig zu sein scheint (sicherlich jeden SQL-Produkt im Land funktioniert auf diese Weise ...?): Einfach in ein VBA (Access, Excel, Word, etc) oder VB6-Modul einfügen und ausführen (keine Referenzen usw. erforderlich): Wenn es stimmt, dass ein einzelnes Leerzeichen gleich ist auf eine leere Zeichenfolge (ZLS) oder eine ‚unbestimmt‘ Anzahl der Leerzeichen, dann werden Sie eine Liste von Y
s sehen:
Sub Fundamentals()
On Error Resume Next
Kill Environ$("temp") & "\DropMe.mdb"
On Error GoTo 0
Dim cat
Set cat = CreateObject("ADOX.Catalog")
With cat
.Create _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & _
Environ$("temp") & "\DropMe.mdb"
With .ActiveConnection
Dim SQL As String
SQL = _
"SELECT IIF(SPACE(0) = SPACE(1), 'Y', 'N')," & vbCr & _
" IIF(SPACE(1) = SPACE(1), 'Y', 'N')," & vbCr & _
" IIF(SPACE(2) = SPACE(1), 'Y', 'N')," & vbCr & _
" IIF(SPACE(3) = SPACE(1), 'Y', 'N')," & vbCr & _
" IIF(SPACE(4) = SPACE(1), 'Y', 'N')," & vbCr & _
" IIF(SPACE(5) = SPACE(1), 'Y', 'N')," & vbCr & _
" IIF(SPACE(55) = SPACE(1), 'Y', 'N')," & vbCr & _
" IIF(SPACE(99) = SPACE(1), 'Y', 'N')," & vbCr & _
" IIF(SPACE(255) = SPACE(1), 'Y', 'N')," & vbCr & _
" IIF(SPACE(4321) = SPACE(1), 'Y', 'N')," & vbCr & _
" IIF(SPACE(54321) = SPACE(1), 'Y', 'N')," & vbCr & _
" IIF(SPACE(654321) = SPACE(1), 'Y', 'N');"
.Execute SQL
Dim rs
Set rs = .Execute(SQL)
MsgBox rs.GetString(, , vbCr)
End With
Set .ActiveConnection = Nothing
End With
End Sub
UPDATE2:
Natürlich füllt Jet/ACE die Felder nicht auf feste Länge!
Falsch. Die Access-Datenbank hat einen festen Breite Textdatentyp allgemein als NCHAR(n)
bekannt (obwohl andere Synonym gelten), die in der Tat tut Pad Spaltenwerte feste Länge ...
Welchen Datentyp NCHAR (10) in dem Zugang Tischdesigner?
Ich werde es nicht in der Tabelle Designer Sache richtig angezeigt. Die Access-Benutzeroberfläche bleibt hinter der Jet 4.0-Technologie zurück, es gibt viele solche Auslassungen. Ich habe Access im Moment nicht installiert - vielleicht könnte jemand den folgenden Code ausführen, öffnen Sie die MDB in der Access UI und sagen Sie uns ...?
Sub AccessNChar()
On Error Resume Next
Kill Environ$("temp") & "\DropMe.mdb"
On Error GoTo 0
Dim cat
Set cat = CreateObject("ADOX.Catalog")
With cat
.Create _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & _
Environ$("temp") & "\DropMe.mdb"
With .ActiveConnection
Dim Sql As String
Sql = "CREATE TABLE TestNChar (col1 NCHAR(10));"
.Execute Sql
Sql = "INSERT INTO TestNChar (col1) VALUES (SPACE(1));"
.Execute Sql
Sql = "SELECT LEN(col1) FROM TestNChar;"
Dim rs
Set rs = .Execute(Sql)
MsgBox rs.GetString
End With
Set .ActiveConnection = Nothing
End With
End Sub
Was machst du mit dem '...'? –
Ich denke, das veranschaulicht drei mögliche Where-Aussagen. – Fionnuala