Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Глюк varchar2 ? / 16 сообщений из 16, страница 1 из 1
27.05.2003, 15:29:38
    #32169744
dsk
dsk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк varchar2 ?
Допустим есть таблица, созданная вот так:

create global temporary table XXX
(
F1 VARCHAR2(150)
)
on commit preserve rows;

В таблицу были импортированны некие данные в первом случае через линк с excel, а во втором через линк с MySQL.

После чего, при выполнении вот такого оператора:
select * from xxx group by f1 order by f1;
был получен довольно странный результат, например:
F1
АЛТАЙСКИЙ КРАЙ
АЛТАЙСКИЙ КРАЙ
АМУРСКАЯ ОБЛАСТЬ
АМУРСКАЯ ОБЛАСТЬ

Что это значит? Группировка работает, но работает как то странно:
select count(*),f1 from xxx group by f1 order by f1;
дает
count(*) F1
144 АЛТАЙСКИЙ КРАЙ
77 АЛТАЙСКИЙ КРАЙ
---
Как это понимать, а главное как исправить, обе эти строки выглядят абсолютно одинакого, лишних пробелов в начале и конце нет, но ...
select count(*),length(f1) from xxx group by f1 order by f1; дает:
count(*) length(F1)
144 14
77 150

Вобщем посоветуйте как эти строки к одному виду привести. Что вообще делать, куда копать?
...
Рейтинг: 0 / 0
27.05.2003, 15:36:15
    #32169757
Vladimir_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк varchar2 ?
обе эти строки выглядят абсолютно одинакого, лишних пробелов в начале и конце нет
последний запрос как раз и говорит о наличии лишних пробелов
если импорт построчный, то надо использовать ltrim(rtrim())
...
Рейтинг: 0 / 0
27.05.2003, 15:37:56
    #32169761
Vladimir_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк varchar2 ?
update XXX set f1=rtrim(f1)
...
Рейтинг: 0 / 0
27.05.2003, 15:43:24
    #32169776
AI
AI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк varchar2 ?
Еще надо отключить уникальный ключ, если он есть.
...
Рейтинг: 0 / 0
27.05.2003, 15:53:55
    #32169793
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк varchar2 ?
А проверь по коду символов, совпадают ли строки. А то достаточное количество русских/английских букв выглядят одинаково:

Код: plaintext
1.
select count(*), f1, dump(f1) from xxx group by f1 order by f1; 


Последние 2 поля совпадают по значениям?
...
Рейтинг: 0 / 0
27.05.2003, 15:54:43
    #32169795
dsk
dsk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк varchar2 ?
Ну хорошо, создать таблицу я могу и так:
create global temporary table xxx on commit preserve rows
as select
rtrim(ltrim(f1,' '),' ') f1 from yyy;

и так:
create global temporary table xxx on commit preserve rows
as select
trim(both ' ' from f1) f1 from yyy;

Все пофигу. результат как описано выше.
...
Рейтинг: 0 / 0
27.05.2003, 15:55:16
    #32169800
raven13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк varchar2 ?
Что-то непонятно что ты хочешь получить запросом :-)
select * from xxx group by f1 order by f1;
Данный запрос выдает все строки из таблицы f1.

Если вам необходимы уникальные значения - используете distinct, а из вашей месаги трудно понять что вам надо
...
Рейтинг: 0 / 0
27.05.2003, 16:00:33
    #32169812
raven13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк varchar2 ?
Пацаны лоханулся. Вчера много водки выпил. Сам не понял что написал.

select trim(f1) from xxx group by f1 order by f1;
...
Рейтинг: 0 / 0
27.05.2003, 16:06:53
    #32169831
Vladimir_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк varchar2 ?
попутно к обсуждению основной темы: меня всегда интересовал вопрос - зачем order by при наличии group by
...
Рейтинг: 0 / 0
27.05.2003, 16:09:06
    #32169837
.dba
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк varchar2 ?
>попутно к обсуждению основной темы: меня всегда интересовал вопрос -
>зачем order by при наличии group by

не проверял, но думаю, что group by сортирует в binary order, а order by если не указано другого - в nls order.
...
Рейтинг: 0 / 0
27.05.2003, 16:16:20
    #32169851
AI
AI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк varchar2 ?
не проверял, но думаю, что group by сортирует в binary order, а order by если не указано другого - в nls order.

Стандартный order by работает в соответствии с nls_lang/nls_territory/nls_sort. Для разных территорий возможны разные настройки. Для CIS - nls_sort=binary.
...
Рейтинг: 0 / 0
27.05.2003, 16:16:41
    #32169852
dsk
dsk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк varchar2 ?
select count(*), f1, dump(f1) from xxx group by f1 order by f1;
Вот этот запрос многое прояснил. Там идет нулевой код (0), Оракл его нигде не отображает, вот я его и не выцепил. Вот теперь пробую его убить.

to Vladimir, а впрочем уже ответили, я кстати тоже не проверял, но рещультаты сортировки иногда различны, а иногда и нет, да и привык я так писать.
...
Рейтинг: 0 / 0
27.05.2003, 16:22:56
    #32169865
dsk
dsk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк varchar2 ?
Все! Всем спасибо, все пофиксил вот таким образом
update xxx set f1=trim(both chr(0) from f1);

p.s. А вот почему собственно так получилось, я попрежнему не понимаю. Связка MySQL-ODBC-Oracle в этом виновата или Excel-ODBC-Oracle... Ну да ладно, буду знать...
...
Рейтинг: 0 / 0
27.05.2003, 16:24:25
    #32169867
.dba
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк varchar2 ?
>Стандартный order by работает в соответствии с nls_lang/nls_territory/nls_sort.
>Для разных территорий возможны разные настройки. Для CIS - nls_sort=binary.

так это понятно, а как group by сортирует?
...
Рейтинг: 0 / 0
27.05.2003, 16:28:39
    #32169876
softy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк varchar2 ?
Так что пробелы тут видимо не причём, это не CHAR в конце-концов.
...
Рейтинг: 0 / 0
27.05.2003, 17:27:22
    #32169956
AI
AI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк varchar2 ?
group by сортирует всегда binary, поэтому свободно использует индексы.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Глюк varchar2 ? / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]