Форум: "Базы";
Текущий архив: 2008.04.06;
Скачать: [xml.tar.bz2];
ВнизКак избавиться от лишних пробелов в результате запроса Найти похожие ветки
← →
Кирей (2007-11-13 12:20) [0]В записях таблицы базы данных улицы записаны с несколькими пробелами перед названием (общая длинна поля 15), когда я выполняю запрос, хотелось бы избавиться от лишних пробелов, а то получается: Населенный пункт + пробелы + улица, подскажите как это победить
← →
ANB © (2007-11-13 12:28) [1]Trim()
← →
Кирей (2007-11-13 12:38) [2]
> Trim
не подходит, слишком громоздко - результат запроса очень большой, может есть какая возможность в SQL?
← →
stanislav_ (2007-11-13 12:43) [3]Если в dbase функция (LTRIM,RTRIM,TRIM) отсутствует, то нужно программно (пусть громоздко и долго) в делфи исправить единоразово, а в программе внесения данных контролировать при занесении данных.
← →
ЮЮ © (2007-11-13 12:44) [4]> результат запроса очень большой
Так если такое практически в каждой записи, значит так и было задумано.
иначе where address like "% %" отобрало бы только "корявые" записи.
>может есть какая возможность в SQL?
Может в клиенте перед щаписью в таблицу избавляться от лишних пробелов?
← →
Кирей (2007-11-13 12:50) [5]Работаю с чужой базой, делаю выборки существующих данных, менять в базе ничего нельзя.
Может как- то в Rave Raport-е можно решить?
← →
Anatoly Podgoretsky © (2007-11-13 12:53) [6]Есть такое понятие как расчетные поля, восспользуйся, на скорость запроса не повлияет.
← →
Sergey13 © (2007-11-13 13:11) [7]> [2] Кирей (13.11.07 12:38)
> не подходит, слишком громоздко - результат запроса очень
> большой, может есть какая возможность в SQL?
Так тебе и посоветовали TRIM. Смотри в LOCALSQL.HLP
← →
Кирей (2007-11-13 13:12) [8]
> ANB © (13.11.07 12:28) [1]
> Trim()
Блин, извиняюсь, на Trim() зря грешил, он запрос не тормозил, проблема была в другом.
← →
Anatoly Podgoretsky © (2007-11-13 13:24) [9]> Кирей (13.11.2007 13:12:08) [8]
Он тормозит запрос, но не существенно, все таки это быстрая операция, выполняемая в памяти
← →
ANB © (2007-11-13 13:39) [10]
> то нужно программно (пусть громоздко и долго) в делфи исправить
> единоразово, а в программе внесения данных контролировать
> при занесении данных.
В ДБФ нету варчаров, т.е. короткие строки дополняются пробелами (как правило) до полной длинны строки.
А это скорее всего Кладр.
← →
Desdechado © (2007-11-13 14:00) [11]> короткие строки дополняются пробелами (как правило) до полной длинны строки
Дополняются, но в конце строки, а не перед, как у автора.
← →
Sergey13 © (2007-11-13 14:12) [12]> [11] Desdechado © (13.11.07 14:00)
Это наверное хвостовые пробелы предыдущего поля.
> а то получается: Населенный пункт + пробелы + улица
← →
Кирей (2007-11-13 14:23) [13]Тогда может еще поможете:
В этом же запросе выбираются № домов и квартир, нужно добавлять литералы "д.", если указан номер дома, и "кв.", если указана квартира, я делал через 3 запроса, соединенными union all, но работает медленно, как сделать быстрее?
← →
Sergey13 © (2007-11-13 14:58) [14]> [13] Кирей (13.11.07 14:23)
Все таки те наверное проще работать с вычисляемыми полями. Вытянул из таблиц все что нужну и кромсай на клиенте как хочешь.
← →
Desdechado © (2007-11-13 16:43) [15]> я делал через 3 запроса, соединенными union all, но работает медленно
Вот я одного не понял, зачем UNION, если нужно соединить литералы в одну строку?
← →
Кирей (2007-11-13 17:25) [16]
> Вот я одного не понял, зачем UNION, если нужно соединить
> литералы в одну строку?
3 запроса потому что не смог победить iif, для каждого случая своя строка (указан дом, не указана квартира, не указан дом и квартира, указан дом и квартира), а потом все в кучу UNION, а если использовать iif() у меня получается не то, что надо (например iif(dom<>"","9пробелов"," д."+dom) в этом случае выведется" д. 2", даже если № дома 258) почему так еще не разобрался
← →
Desdechado © (2007-11-13 17:42) [17]SELECT iif(Trim(dom)="","","д."+Trim(dom)) FROM tab
← →
Кирей (2007-11-14 09:05) [18]
> SELECT iif(Trim(dom)="","","д."+Trim(dom)) FROM tab
в этом случае пустое поле, а чем больше пробелов в операторе по выполняющемуся условию, тем больше влазит, тоесть если два пробела, то будет видно "д." и все, а номер не добавится, если сделать " " (2 символа "д." + 6 символов длинны строки в таблице), номера отражаются, но так: "д. 21" и выражение "д." + trim(dom) не работает
← →
Кирей (2007-11-14 09:25) [19]Может в ADO какой-то параметр влияет?
← →
Sergey13 © (2007-11-14 09:38) [20]> [18] Кирей (14.11.07 09:05)
Не особо понятно, что ты имел в виду, но похоже на то, что длина текстового поля в датасете неверно определяется.
← →
Кирей (2007-11-14 10:39) [21]
> Не особо понятно, что ты имел в виду, но похоже на то, что
> длина текстового поля в датасете неверно определяется.
Сильно смахивает на то, что длинна нового поля устанавливается в операторе iif конкретно через длинну результата, а trim(dom) не работает,
т.к. в результате получаем "д."+" 21" -> "д. 21" тоесть, если не учтем длинну результата, то не увиди часть поля
← →
Sergey13 © (2007-11-14 11:03) [22]> [21] Кирей (14.11.07 10:39)
Ну так установи длину поля какую нужно.
← →
Desdechado © (2007-11-14 11:18) [23]Кирей (14.11.07 09:05) [18]
Так и не понял, что ты хотел сказать, формулируй конкретнее, чем на уровне детсада.
SELECT CAST( iif(Trim(dom)="","","д."+Trim(dom)) AS VARCHAR(100) ) FROM tab
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2008.04.06;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.006 c