Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.11.03;
Скачать: CL | DM;

Вниз

Сравнение таблиц по срок.полям (лишние внутренние пробелы)   Найти похожие ветки 

 
Андрей Пл   (2010-12-22 11:04) [0]

Мне нужно сравнить две таблицы по двум полям и выявить где значения у них не совпадают. И в первой и во второй таблице поле строковое, проблема в том что значения в одной из таблиц могут иметь внутренние лишние пробелы (т.е слова могут разделяться не одним а двумя, тремя.... пробелами). Так вот значения в таблицах считать совпадающими если они полностью идентичны за исключением пробелов:
"aaa bbb"  считать одинаковыми "aaa    bbb"

как мне в скюэль запросе удалить лишние внутренние пробелы (заранее не известно сколько)  или может есть другой способ сравнить...?
заранее спасибо.


 
Ega23 ©   (2010-12-22 11:15) [1]

REPLACE + F1


 
Jeer ©   (2010-12-22 11:18) [2]

REPLACE ?


 
Вариант   (2010-12-22 14:09) [3]


> Jeer ©   (22.12.10 11:18) [2]

Вариант первый короткий - REPLACE-ом удалить вообще все пробелы, коль они не нужны для сравнения типа SELECT REPLACE(строка, " ","")
Вариант второй - удалить до одного пробела WHILE + REPLACE, где маской поиска задать два пробела, а заменой дать один пробел - но это не нужно по заданному вопросу, раз можно вариантом 1(разве что для приведения  уже имеющихся записей таблицы к "красивому виду")


 
Jeer ©   (2010-12-22 14:41) [4]


> Вариант   (22.12.10 14:09) [3]
> > Jeer ©   (22.12.10 11:18) [2]


Это не ко мне :)


 
Вариант   (2010-12-22 14:58) [5]


> Jeer ©   (22.12.10 14:41) [4]

Точно, это автору вопроса:-)


 
ANB   (2010-12-27 18:02) [6]


> Вариант второй - удалить до одного пробела WHILE + REPLACE

while - не даст все сделать в одном запросе - придется писать функцию.

В оракле помог бы RegExp_Replace, но вроде как ms sql тоже научился работать с регулярными выражениями.


 
Вариант   (2010-12-28 14:29) [7]

A
> NB   (27.12.10 18:02) [6]


> while - не даст все сделать в одном запросе - придется писать
> функцию.

Точно, небольшую функцию

> но вроде как ms sql тоже научился работать с регулярными
> выражениями.

Интересно, не слышал. Поискал для 2005 - там это возможно на уровне подключения сборок .NET или использования COM объектов.


 
Ega23 ©   (2010-12-28 17:54) [8]

Зачем функция-то?????
что-то типа

WHERE REPLACE(T1.Field, " ", "") = REPLACE(T2.Field, " ", "")
Сам запрос щас в голову уже не лезет, может из дома напишу.


 
Вариант   (2010-12-29 06:16) [9]


> Ega23 ©   (28.12.10 17:54) [8]

Для первого варианта не нужна.

> Вариант   (22.12.10 14:09) [3]
>
> Вариант первый короткий - REPLACE-ом удалить вообще все
> пробелы, коль они не нужны для сравнения типа SELECT REPLACE(строка,
>  " ","")


А вот второй, где надо оставить один пробел из неизвестного числа пробелов - мне пришло только с WHILE+REPLACE в голову - скрипт получается несложный, но как его оформить одним запросом?


 
Ega23 ©   (2010-12-29 08:01) [10]

Нафига вообще второй вариант? Зачем усложнять-то, если автор чётко напейсал:

> проблема в том что значения в одной из таблиц могут иметь
> внутренние лишние пробелы

Убираем ВСЕ пробелы и сравниваем.


 
Вариант   (2010-12-29 11:12) [11]


> Ega23 ©   (29.12.10 08:01) [10]

Для решения заданного автором вопроса в лоб второй вариант не нужен.
Но мне кажется, что наличие фраз в поле содержащие незначимые пробелы нехорошая практика, если тому конечно нет веских оснований. Правильней на мой взгляд сделать "чистку" таблиц(ы) и создать "правило", запрещающее вносить подобные записи В этом случае и сравнения будут быстрее и не будет "мусора" перед глазами пользователя.


 
Вариант   (2010-12-29 11:16) [12]

И дополнение к

> Вариант   (29.12.10 11:12) [11]


В этом случае для чистки таблицы и возможен вариант два. Хотя если это выполнить однократно, то можно просто на уровне скрипта реализовать, выполняемого их студии. И тогда функция не нужна. А вот если включить как правилом для подчистки при вводе строк на уровне базы, то можно и оформить функцией.


 
Ega23 ©   (2010-12-29 11:17) [13]


> Правильней на мой взгляд сделать "чистку" таблиц(ы) и создать
> "правило", запрещающее вносить подобные записи


http://delphimaster.net/view/15-1293519707/
Буквально вчера писал:

Ega23 ©   (28.12.10 18:27) [53]

> А какой смысл решать техническими средствами организационные
> вопросы?

А это есть частое заблуждение, которым многие (да и я сам, чё скрывать-то) грешат. Всегда хочется, хотя бы ради искусства, чтобы "программа приняла вид лома с кучей настраиваемых шарниров". А лучше фреймворк написать.
А заказчику не нужна "автоматическая обрывалка ушей оператору", ему проще человека специального нанять. Или лучше оператора штрафовать за косяк.

И потом начинаются изгаления по распознаванию введённого текста.
Как сделать, чтобы программа поняла, что "Рога и Копыта Российской Федерации", "Рога и Копыта РФ" и "Poгa и Koпытa PФ" - одна и та же организация с одним ID.
А не надо делать, надо оператора покарать за такой ввод.


 
Вариант   (2010-12-29 11:28) [14]


> Ega23 ©   (29.12.10 11:17) [13]

Насчет оператора -согласен, покарать. Но где можно - надо помочь.
Есть просто информационные поля, типа памятки, мемо -их нафиг и не нужно проверять, они не поисковые. И есть "важные" поля, поля в справочниках, где разарабатывается шаблон ввода, как например для ввода сотовых телефонов или еще какие другие. И если есть возможность задать этот шаблон, то почему бы и нет?  Если к вам со стороны пришел такой справочник и вы будете информацию из него добавлять в свой, то почему бы его не привести в порядок там, где это возможно? Хотя думаю это тема уже скорее в "потрепаться".


 
Ega23 ©   (2010-12-29 11:35) [15]

Практика показывает, что полной защиты от дурака - нет. Всё равно лазейку найдут.
Отсюда следует, что разрабатывать офигенно-навороченную защиту от дурака можно, если это по ТЗ требуется. В остальных случаях проще ограничиться чем-то совсем ненапряжным.


 
Вариант   (2010-12-29 11:45) [16]


> Ega23 ©   (29.12.10 11:35) [15]


> Практика показывает, что полной защиты от дурака - нет.
> Всё равно лазейку найдут.

Согласен.

> Отсюда следует, что разрабатывать офигенно-навороченную
> защиту от дурака можно, если это по ТЗ требуется. В остальных
> случаях проще ограничиться чем-то совсем ненапряжным


Я и не предлагал напряженного варианта. Кстати кроме ТЗ стимулом к действию еще может быть собственная эксплуатация своего же продукта, особенно в экстримальных условиях, при  нехватке времени ... очень может простимулировать. Или опять таки каждодневная рутина, которую опять таки надо делать самому и в какой-то момент понимаешь, что можно сократить время работы, количество действий ну и т.д.
Впрочем, не нравится тебе вариант два - не делай, я же не против:-). Не нужен он автору вопроса, то же его усмотрение...


 
evvcom ©   (2010-12-31 13:41) [17]

Извините, но я понимаю "лишние пробелы" - это когда вместо одного их 2 и более (в том числе и символы табуляции), но удалятьсовершенновсепробелывофразеэтонеправильно! Это аналогично удалению 0 в числах. Если 0 лидирующий, то его можно безболезненно удалить, если уже где-то после первой значимой цифры, то и сам он становится значимым.


 
Вариант   (2010-12-31 18:30) [18]


> evvcom ©   (31.12.10 13:41) [17]

н
> о удалятьсовершенновсепробелывофразеэтонеправильно!

А удалять все в самом поле никто не предлагает.


 
sniknik ©   (2011-01-02 00:07) [19]

> А удалять все в самом поле никто не предлагает.
а не про удаление в поле речь... а о значимости "пустых" символов при сравнении, в зависимости от того где они.
т.е. варианты с  "мама", "ма ма" и " мама" в одном случае не равнозначны, в другом равны.


 
Вариант   (2011-01-05 07:23) [20]


> sniknik ©   (02.01.11 00:07) [19]

Согласен, если вопрос стоит именно так. Но в
> Андрей Пл   (22.12.10 11:04)
об этом сказано явно -

> значения в таблицах считать совпадающими если они полностью
> идентичны за исключением пробелов
>


 
Вариант   (2011-01-05 07:31) [21]


> sniknik ©   (02.01.11 00:07) [19]


Хотя возможна ситуация ложного сравнения, согласен (мне и кажется такая вероятность мала, но тем не менее зачем иметь проблемы, если их можно избежать). Например "12" и "1   2"  будут равнозначны. Тогда вариант №2

> Вариант   (22.12.10 14:09) [3]
- удалить лишние пробелы до одного.



Страницы: 1 вся ветка

Текущий архив: 2013.11.03;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.007 c
15-1368704471
sniknik
2013-05-16 15:41
2013.11.03
Клиент не работает под wine (убунта) ...


4-1268010549
JohnJ
2010-03-08 04:09
2013.11.03
закрепить панель задач


2-1360138340
Lonsdale
2013-02-06 12:12
2013.11.03
multi edit records


15-1368728640
Cynic
2013-05-16 22:24
2013.11.03
Разработчик интерфейсов


4-1268135204
somio
2010-03-09 14:46
2013.11.03
Как узнать права текущего пользователя Windows