Механизм базы данных Access обычно определяет уникальность текстовых ('String') данных, используя только первые 255 символов, поэтому DISTINCT
и GROUP BY
будут усекаться.
Это предложение немного затянуто, но оно работает: разбейте MEMO
на куски по 255 символов, используйте DISTINCT
на кусках, а затем соедините их снова вместе, например, (Доступ к синтаксису режима запросов ANSI-92 ядра базы данных, то есть к подзапросам):
SELECT DT2.MyMemoCol_1 & DT2.MyMemoCol_2 AS MyMemoCol
FROM (
SELECT DISTINCT DT1.MyMemoCol_1, DT1.MyMemoCol_2
FROM (
SELECT MID(MyMemoCol, 1, 255) AS MyMemoCol_1,
MID(MyMemoCol, 256, 255) AS MyMemoCol_2
FROM Test1
) AS DT1
) AS DT2;
Комментарий опубликован:
Разбивка памятки на
255-символьные куски полностью
ненужным. Вы можете просто отсортировать
Слева (MyMemoCol, 8192) или какой-то другой
соответственно выбранное значение для
длина поля возвращается.
Ну, в моем тестировании это вообще не работает. Быстрое воспроизведение:
CREATE TABLE Test1 (MyMemoCol MEMO NOT NULL);
INSERT INTO Test1 (MyMemoCol) VALUES (STRING(300, 'A'));
INSERT INTO Test1 (MyMemoCol) VALUES (STRING(300, 'A') & STRING(5, 'X'));
INSERT INTO Test1 (MyMemoCol) VALUES (STRING(300, 'A'));
SELECT LEFT$(MyMemoCol, 8192)
FROM Test1
GROUP
BY LEFT$(MyMemoCol, 8192);
Протестировано с использованием представления SQL объекта ACE механизма доступа Access2007 .accdb в режиме запросов SQL-92. Запрос возвращает одну строку (неверно), значение которой было усечено до 255 символов (неверно).
Предыдущий запрос "chunking" возвращает две строки (правильно) без усечения (правильно).