апрос на объединение значений записей в текстовом поле
От: Аноним  
Дата: 31.08.04 11:20
Оценка:
Позволяет ли SQL построить выражение, которое объединит данные (текстовые) из нескольких записей одного поля для рассмотрения их как единой фразы?
Вопрос вызван следующей проблемой: в таблице необходимо хранить тексты соглашений, длина которых может быть произвольной (от 0 до x000 символов). Нелогично выделять max[x]000 символов под каждое соглашение, поэтому планируется реализовать следующий вариант:
установить приемлемую длину (100 символов, к примеру) для поля, и затем каждое соглашение разбивать на блоки по 100 символов. Т.о. таблица имеет вид:
AGRIndex | AGRNumAgreement | AGRPartNum | AGRText
........ | ............... | .......... | .......

AGRIndex - Autoinc
AGRNumAgreement - номер соглашения
AGRPartNum - номер блока 
AGRText - текст блока


А вопрос возникает, потому что необходимо будет осуществлять поиск по БД, используя тексты. Как вы понимаете, без полного, объединенного текста полноценный поиск невозможен.

Желаемое: нечто вроде
SELECT ... LIKE "обеспечение информационнной безопасности"


Существует ли способ объединить блоки?
Re: апрос на объединение значений записей в текстовом поле
От: lozzy  
Дата: 31.08.04 11:23
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Существует ли способ объединить блоки?


Поле типа TEXT с Full Text Search
Re[2]: апрос на объединение значений записей в текстовом пол
От: Аноним  
Дата: 31.08.04 11:56
Оценка:
L>Поле типа TEXT с Full Text Search

Ограничения: Paradox + BDE. Насколько помню, там ввобще отсутствует тип Text. А уж чтобы с Full Text Search — это уже розовые мечты. Хотя, может, я ошибаюсь...
Re[3]: апрос на объединение значений записей в текстовом пол
От: wildwind Россия  
Дата: 31.08.04 12:01
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Ограничения: Paradox + BDE.


BDE этого не умеет. Если к Paradox привязан крепко, то делать тебе свой full text индекс и свой поиск.
Re[4]: апрос на объединение значений записей в текстовом пол
От: Аноним  
Дата: 31.08.04 12:07
Оценка:
>BDE этого не умеет. Если к Paradox привязан крепко, то делать тебе свой full text индекс и свой поиск.
И свой диалект SQL
Тормознуто будет...
Мне посоветовали Memo (BLOB) использовать. Наверное, так и сделаю
Re: апрос на объединение значений записей в текстовом поле
От: Kurd  
Дата: 31.08.04 12:17
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Позволяет ли SQL построить выражение, которое объединит данные (текстовые) из нескольких записей одного поля для рассмотрения их как единой фразы?

А>Вопрос вызван следующей проблемой: в таблице необходимо хранить тексты соглашений, длина которых может быть произвольной (от 0 до x000 символов). Нелогично выделять max[x]000 символов под каждое соглашение, поэтому планируется реализовать следующий вариант:
А>установить приемлемую длину (100 символов, к примеру) для поля, и затем каждое соглашение разбивать на блоки по 100 символов. Т.о. таблица имеет вид:
А>
А>AGRIndex | AGRNumAgreement | AGRPartNum | AGRText
А>........ | ............... | .......... | .......

А>AGRIndex - Autoinc
А>AGRNumAgreement - номер соглашения
А>AGRPartNum - номер блока 
А>AGRText - текст блока
А>


А>А вопрос возникает, потому что необходимо будет осуществлять поиск по БД, используя тексты. Как вы понимаете, без полного, объединенного текста полноценный поиск невозможен.


А>Желаемое: нечто вроде

А>
А>SELECT ... LIKE "обеспечение информационнной безопасности"
А>


А>Существует ли способ объединить блоки?


На С#:

import System.data.SqlClient;
...

SqlConnection dbcn=new SqlConnection(ConnectionString);
dbcn.Open();
SqlCommand cmd=new SqlCommand("SELECT * from YourTableName WHERE AGRNumAgreement="+num.ToString(),dbcn);
SqlDataReader reader=cmd.ExecuteReader();
string agreement="";
while(reader.Read())
{
   agreement+=(string)reader["AGDText"];
}
reader.close();
dbcn.close();


В строке agreement получишь соглашениею
Re[2]: апрос на объединение значений записей в текстовом пол
От: Аноним  
Дата: 31.08.04 12:26
Оценка:
K>На С#:

K>
K>import System.data.SqlClient;
K>...

K>SqlConnection dbcn=new SqlConnection(ConnectionString);
K>dbcn.Open();
K>SqlCommand cmd=new SqlCommand("SELECT * from YourTableName WHERE AGRNumAgreement="+num.ToString(),dbcn);
K>SqlDataReader reader=cmd.ExecuteReader();
K>string agreement="";
K>while(reader.Read())
K>{
K>   agreement+=(string)reader["AGDText"];
K>}
K>reader.close();
K>dbcn.close();
K>


K>В строке agreement получишь соглашениею


Кхм. Спасибо за ответ, конечно, но это немного не то, что я имел в виду.
Такой способ, конечно, имеет право на жизнь, но представь: бежать по всем соглашениям и производить ЭТО для каждого...

Тормознуто будет

Я-то хотел single SQL expression
Мне вот уже подсказали, что нужно юзать Memo (BLOB) — он не накладывает ограничений на объем данных, однако какие-то траблы будут с поиском — "будем искать"
Re: апрос на объединение значений записей в текстовом поле
От: Sinclair Россия https://github.com/evilguest/
Дата: 01.09.04 04:08
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Позволяет ли SQL построить выражение, которое объединит данные (текстовые) из нескольких записей одного поля для рассмотрения их как единой фразы?

Как правило, это не имеет никакого смысла. AFAIK, большинство движков налагают на строковые переменные те же ограничения, что и на поля. А поскольку твое желание побить текст на блоки связано именно с необходимостью превысить лимит размера столбца, то ты неизбежно напорешься на то же ограничение при склейке.
Если это не так, то тебе придется посмотреть в сторону курсоров. Только редкие движки (типа MS SQL) позволяют себе такие дыры, как
select @a=@a+mycolumn from mytable
... << RSDN@Home 1.1.4 beta 1 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.