-
Мне нужно сравнить две таблицы по двум полям и выявить где значения у них не совпадают. И в первой и во второй таблице поле строковое, проблема в том что значения в одной из таблиц могут иметь внутренние лишние пробелы (т.е слова могут разделяться не одним а двумя, тремя.... пробелами). Так вот значения в таблицах считать совпадающими если они полностью идентичны за исключением пробелов: 'aaa bbb' считать одинаковыми 'aaa bbb'
как мне в скюэль запросе удалить лишние внутренние пробелы (заранее не известно сколько) или может есть другой способ сравнить...? заранее спасибо.
-
REPLACE + F1
-
REPLACE ?
-
> Jeer © (22.12.10 11:18) [2]
Вариант первый короткий - REPLACE-ом удалить вообще все пробелы, коль они не нужны для сравнения типа SELECT REPLACE(строка, ' ','') Вариант второй - удалить до одного пробела WHILE + REPLACE, где маской поиска задать два пробела, а заменой дать один пробел - но это не нужно по заданному вопросу, раз можно вариантом 1(разве что для приведения уже имеющихся записей таблицы к "красивому виду")
-
> Вариант (22.12.10 14:09) [3] > > Jeer © (22.12.10 11:18) [2]
Это не ко мне :)
-
> Jeer © (22.12.10 14:41) [4]
Точно, это автору вопроса:-)
-
> Вариант второй - удалить до одного пробела WHILE + REPLACE
while - не даст все сделать в одном запросе - придется писать функцию.
В оракле помог бы RegExp_Replace, но вроде как ms sql тоже научился работать с регулярными выражениями.
-
A > NB (27.12.10 18:02) [6]
> while - не даст все сделать в одном запросе - придется писать > функцию.
Точно, небольшую функцию
> но вроде как ms sql тоже научился работать с регулярными > выражениями.
Интересно, не слышал. Поискал для 2005 - там это возможно на уровне подключения сборок .NET или использования COM объектов.
-
Зачем функция-то????? что-то типа WHERE REPLACE(T1.Field, ' ', '') = REPLACE(T2.Field, ' ', '') Сам запрос щас в голову уже не лезет, может из дома напишу.
-
> Ega23 © (28.12.10 17:54) [8]
Для первого варианта не нужна.
> Вариант (22.12.10 14:09) [3] > > Вариант первый короткий - REPLACE-ом удалить вообще все > пробелы, коль они не нужны для сравнения типа SELECT REPLACE(строка, > ' ','')
А вот второй, где надо оставить один пробел из неизвестного числа пробелов - мне пришло только с WHILE+REPLACE в голову - скрипт получается несложный, но как его оформить одним запросом?
-
Нафига вообще второй вариант? Зачем усложнять-то, если автор чётко напейсал:
> проблема в том что значения в одной из таблиц могут иметь > внутренние лишние пробелы
Убираем ВСЕ пробелы и сравниваем.
-
> Ega23 © (29.12.10 08:01) [10]
Для решения заданного автором вопроса в лоб второй вариант не нужен. Но мне кажется, что наличие фраз в поле содержащие незначимые пробелы нехорошая практика, если тому конечно нет веских оснований. Правильней на мой взгляд сделать "чистку" таблиц(ы) и создать "правило", запрещающее вносить подобные записи В этом случае и сравнения будут быстрее и не будет "мусора" перед глазами пользователя.
-
И дополнение к
> Вариант (29.12.10 11:12) [11]
В этом случае для чистки таблицы и возможен вариант два. Хотя если это выполнить однократно, то можно просто на уровне скрипта реализовать, выполняемого их студии. И тогда функция не нужна. А вот если включить как правилом для подчистки при вводе строк на уровне базы, то можно и оформить функцией.
-
> Правильней на мой взгляд сделать "чистку" таблиц(ы) и создать > "правило", запрещающее вносить подобные записи http://pda.delphimaster.net/?id=1293519707&n=3&p=3Буквально вчера писал: Ega23 © (28.12.10 18:27) [53]> А какой смысл решать техническими средствами организационные > вопросы? А это есть частое заблуждение, которым многие (да и я сам, чё скрывать-то) грешат. Всегда хочется, хотя бы ради искусства, чтобы "программа приняла вид лома с кучей настраиваемых шарниров". А лучше фреймворк написать. А заказчику не нужна "автоматическая обрывалка ушей оператору", ему проще человека специального нанять. Или лучше оператора штрафовать за косяк. И потом начинаются изгаления по распознаванию введённого текста. Как сделать, чтобы программа поняла, что "Рога и Копыта Российской Федерации", "Рога и Копыта РФ" и "Poгa и Koпытa PФ" - одна и та же организация с одним ID. А не надо делать, надо оператора покарать за такой ввод.
-
> Ega23 © (29.12.10 11:17) [13]
Насчет оператора -согласен, покарать. Но где можно - надо помочь. Есть просто информационные поля, типа памятки, мемо -их нафиг и не нужно проверять, они не поисковые. И есть "важные" поля, поля в справочниках, где разарабатывается шаблон ввода, как например для ввода сотовых телефонов или еще какие другие. И если есть возможность задать этот шаблон, то почему бы и нет? Если к вам со стороны пришел такой справочник и вы будете информацию из него добавлять в свой, то почему бы его не привести в порядок там, где это возможно? Хотя думаю это тема уже скорее в "потрепаться".
-
Практика показывает, что полной защиты от дурака - нет. Всё равно лазейку найдут. Отсюда следует, что разрабатывать офигенно-навороченную защиту от дурака можно, если это по ТЗ требуется. В остальных случаях проще ограничиться чем-то совсем ненапряжным.
-
> Ega23 © (29.12.10 11:35) [15]
> Практика показывает, что полной защиты от дурака - нет. > Всё равно лазейку найдут.
Согласен.
> Отсюда следует, что разрабатывать офигенно-навороченную > защиту от дурака можно, если это по ТЗ требуется. В остальных > случаях проще ограничиться чем-то совсем ненапряжным
Я и не предлагал напряженного варианта. Кстати кроме ТЗ стимулом к действию еще может быть собственная эксплуатация своего же продукта, особенно в экстримальных условиях, при нехватке времени ... очень может простимулировать. Или опять таки каждодневная рутина, которую опять таки надо делать самому и в какой-то момент понимаешь, что можно сократить время работы, количество действий ну и т.д. Впрочем, не нравится тебе вариант два - не делай, я же не против:-). Не нужен он автору вопроса, то же его усмотрение...
-
Извините, но я понимаю "лишние пробелы" - это когда вместо одного их 2 и более (в том числе и символы табуляции), но удалятьсовершенновсепробелывофразеэтонеправильно! Это аналогично удалению 0 в числах. Если 0 лидирующий, то его можно безболезненно удалить, если уже где-то после первой значимой цифры, то и сам он становится значимым.
-
> evvcom © (31.12.10 13:41) [17]
н > о удалятьсовершенновсепробелывофразеэтонеправильно!
А удалять все в самом поле никто не предлагает.
-
> А удалять все в самом поле никто не предлагает. а не про удаление в поле речь... а о значимости "пустых" символов при сравнении, в зависимости от того где они. т.е. варианты с "мама", "ма ма" и " мама" в одном случае не равнозначны, в другом равны.
|