Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.009 c
8-1169390270
Владимир Березин
2007-01-21 17:37
2008.04.06
TShockWaveFlash in run time


2-1205035977
Adios
2008-03-09 07:12
2008.04.06
как узнать имя файла шривта по названию шрифта


4-1186575096
APXi
2007-08-08 16:11
2008.04.06
Проблема с SetWindowsHookEx


4-1185992588
DelphiKettle
2007-08-01 22:23
2008.04.06
Как работать с купюроприемником?


15-1203938863
Настёна
2008-02-25 14:27
2008.04.06
Автоматическая перезагрузка





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский