Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Проблема со сложным полем  [new]
Call_me_gosu
Member

Откуда:
Сообщений: 72
Господа, подскажите, пожалуйста, как лучше всего можно решить задачу.
В таблице есть текстовое поле boroda, в котором находится неограниченное количество дат. пример: "12,02,2012;23.02.2013,3-5-13"
Хранятся они ужас как. могут отделяться друг от друга любыми знаками, за место точек тоже могут быть любые даты,ну эту проблему я допустим решу и смогу отделить даты друг от друга.
А теперь собственно сама задача есть дата и нужно найти все строки в таблице, в которых эта дата есть в поле boroda хотя бы один раз.


В этом поле за 3 года не было не разу больше 4 дат и первой мыслью было просто сделать 4 поля формата дата, но заказчик сказал, что дат может быть неограниченное количество.
Второй мыслью было привести все даты в поле boroda к одному формату, оставив его текстовым, и искать дату по вхождению. Но это долго и некрасиво.

Есть идеи?
21 янв 14, 16:14    [15447702]     Ответить | Цитировать Сообщить модератору
 Re: Проблема со сложным полем  [new]
Glory
Member

Откуда:
Сообщений: 104751
Call_me_gosu
А теперь собственно сама задача есть дата и нужно найти все строки в таблице, в которых эта дата есть в поле boroda хотя бы один раз.

Ну так если "ну эту проблему я допустим решу и смогу отделить даты друг от друга. ", то осталось только сравнить заданную дату с "отделенными"
21 янв 14, 16:16    [15447729]     Ответить | Цитировать Сообщить модератору
 Re: Проблема со сложным полем  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Call_me_gosu
Есть идеи?
Найти проектировщика этой базы и поинтересоваться его мнением, как с такой структурой теперь работать.
21 янв 14, 16:17    [15447740]     Ответить | Цитировать Сообщить модератору
 Re: Проблема со сложным полем  [new]
Call_me_gosu
Member

Откуда:
Сообщений: 72
Glory, это же очень долго, нет способа побыстрее?
Сергей Александрович, проектировщик БД, сказал мне подумать над этой задачей :)
21 янв 14, 16:42    [15447945]     Ответить | Цитировать Сообщить модератору
 Re: Проблема со сложным полем  [new]
Glory
Member

Откуда:
Сообщений: 104751
Call_me_gosu
Glory, это же очень долго, нет способа побыстрее?

В смысле побыстрее ?
Не заносите неправильные данные в поля с неправильным типами.
Тогда сразу можно будет искать заданную величину
21 янв 14, 16:44    [15447971]     Ответить | Цитировать Сообщить модератору
 Re: Проблема со сложным полем  [new]
Call_me_gosu
Member

Откуда:
Сообщений: 72
Glory, я правильно понимаю, что Вы предлагаете искать мне текстовое поле в текстовом поле?
21 янв 14, 16:47    [15447990]     Ответить | Цитировать Сообщить модератору
 Re: Проблема со сложным полем  [new]
Glory
Member

Откуда:
Сообщений: 104751
Call_me_gosu
Glory, я правильно понимаю, что Вы предлагаете искать мне текстовое поле в текстовом поле?

Да все равно. Можете текстовое в текстовом, можете дату в дате
Все равно придется парсить, валидировать и конвертировать изначально неправильные данные.
По сравнению с этим поиск займет пару процентов всего времени выполнения
21 янв 14, 16:51    [15448027]     Ответить | Цитировать Сообщить модератору
 Re: Проблема со сложным полем  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 8933
Можно, например, сделать табличную функцию, парсящую поле в список дат и писать что-то типа
...
from table t
      CROSS APPLY dbo.ParseBoroda (t.Boroda) f
where f.date = @date
21 янв 14, 17:02    [15448123]     Ответить | Цитировать Сообщить модератору
 Re: Проблема со сложным полем  [new]
Call_me_gosu
Member

Откуда:
Сообщений: 72
Glory, дело в том, что искать дату в этом поле придется довольно часто, поэтому можно сделать в таблице дополнительное поле с отпарсеными данными boroda2(парсить придется всего единожды). Это собственно и есть 2 моя мысль из двух. Но искать текстовые данные в текстовых, чёрт побери, это по-моему очень кривой вариант))))
21 янв 14, 17:08    [15448162]     Ответить | Цитировать Сообщить модератору
 Re: Проблема со сложным полем  [new]
Glory
Member

Откуда:
Сообщений: 104751
Call_me_gosu
(парсить придется всего единожды).

В смысле ?
таблица readonly что ли ?
21 янв 14, 17:10    [15448180]     Ответить | Цитировать Сообщить модератору
 Re: Проблема со сложным полем  [new]
Call_me_gosu
Member

Откуда:
Сообщений: 72
Glory, нет. но имеющие данные можно отпарсить, а на новые сделать заглушку при вводе, чтобы правильно уже вводились новые данные
21 янв 14, 17:15    [15448210]     Ответить | Цитировать Сообщить модератору
 Re: Проблема со сложным полем  [new]
Call_me_gosu
Member

Откуда:
Сообщений: 72
Кот Матроскин,
если искать дату пришлось бы один раз, то отличное решение.
Проблема в том, что дату придется искать по несколько раз в день, а в таблице не один миллион строк.
Если бы количество дат было ограничено, вообще никаких проблем, но что делать в условиях их неограниченности?
21 янв 14, 17:22    [15448243]     Ответить | Цитировать Сообщить модератору
 Re: Проблема со сложным полем  [new]
Glory
Member

Откуда:
Сообщений: 104751
Call_me_gosu
но имеющие данные можно отпарсить, а на новые сделать заглушку при вводе, чтобы правильно уже вводились новые данные

И что вам мешает отпарсить в поле нужного типа и заносить в поле нужного типа ?
21 янв 14, 17:23    [15448253]     Ответить | Цитировать Сообщить модератору
 Re: Проблема со сложным полем  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 8933
Call_me_gosu
Кот Матроскин,
если искать дату пришлось бы один раз, то отличное решение.
Проблема в том, что дату придется искать по несколько раз в день, а в таблице не один миллион строк.
Если бы количество дат было ограничено, вообще никаких проблем, но что делать в условиях их неограниченности?


Сделать Child-таблицу, конечно - то что в моем примере эмулирует функция
Как организовать данные правильно - тут-то вообще никакой проблемы нет, проблема в том чтобы синхронизировать старое и новое представление. Если Вас этот аспект не пугает - нен вижу вообще никакой проблемы
21 янв 14, 17:29    [15448285]     Ответить | Цитировать Сообщить модератору
 Re: Проблема со сложным полем  [new]
Call_me_gosu
Member

Откуда:
Сообщений: 72
Glory, поле нужного типа, это поле формата дата? если да, то мешает то, что я не знаю сколько дат может быть максимум в этом поле. Если оставить в текстовом поле, то это долго. Других вариантов я не придумал, поэтому и обратился на форум..
21 янв 14, 17:31    [15448303]     Ответить | Цитировать Сообщить модератору
 Re: Проблема со сложным полем  [new]
Call_me_gosu
Member

Откуда:
Сообщений: 72
Кот Матроскин, "Сделать Child-таблицу" можно поподробнее?
прошу прощения, что всех уже тут достал, со своими проблемами..
21 янв 14, 17:34    [15448312]     Ответить | Цитировать Сообщить модератору
 Re: Проблема со сложным полем  [new]
Call_me_gosu
Member

Откуда:
Сообщений: 72
понял
во я дурак
спасибо всем большое!!!!
21 янв 14, 17:37    [15448326]     Ответить | Цитировать Сообщить модератору
 Re: Проблема со сложным полем  [new]
Call_me_gosu
Member

Откуда:
Сообщений: 72
воспользуюсь решением матроскина.
21 янв 14, 17:38    [15448334]     Ответить | Цитировать Сообщить модератору
 Re: Проблема со сложным полем  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 8933
Call_me_gosu
Кот Матроскин, "Сделать Child-таблицу" можно поподробнее?
прошу прощения, что всех уже тут достал, со своими проблемами..


Вот у вас есть таблица
ID
Boroda
...

Вы делаете еще одну таблицу Boroda_New, с полями
ID (первичный ключ из первой таблицы)
Date
Number (только если Вам важен порядок дат в Boroda, иначе не нужно)


Для записи
ID Boroda
1 01/01/2014; 02/01/2014 05/01/2014

Вы получаете 3 записи в Boroda_new

ID date Number
101/01/20141
1 02/01/20142
105/01/20143
21 янв 14, 17:42    [15448347]     Ответить | Цитировать Сообщить модератору
 Re: Проблема со сложным полем  [new]
Call_me_gosu
Member

Откуда:
Сообщений: 72
Кот Матроскин,
да, именно так я и понял. спасибо большое еще раз)
21 янв 14, 17:53    [15448406]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить