SELECT *
FROM MyTable
WHERE IIF(MyField = ' ', NULL, MyField) IS NULL;
ОБНОВЛЕНИЕ: вот демонстрация того, как "заполнение ANSI" работает в Механизме доступа к базе данных (ACE, Jet, независимо от того, что), что так или иначе кажется необходимым (конечно, каждый продукт SQL на земле работает таким образом ...?): просто вставьте в любой модуль VBA (Access, Excel, Word и т. д.) или VB6 и запустите (ссылки и т. д. не требуются): если верно, что один пробел равен строке нулевой длины (ZLS) или«неопределенное» количество пробелов, тогда вы увидите список Y
s:
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:
Конечно, Jet / ACE не дополняет поля до фиксированныхдлина!
Неверно.База данных Access имеет текстовый тип данных фиксированной ширины, обычно известный как NCHAR(n)
(хотя применяется другой синоним), который действительно дополняет значения столбца фиксированной длиной ...
Какой тип данных является NCHAR (10) в конструкторе таблиц Access?
Не знаю, будет ли это правильно в конструкторе таблиц.Интерфейс Access по-прежнему отстает от технологии Jet 4.0, таких упущений много.В настоящий момент у меня не установлен Access - возможно, кто-то может запустить следующий код, открыть .mdb в пользовательском интерфейсе Access и сообщить нам ...?
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