|
|
|
Глюк varchar2 ?
|
|||
|---|---|---|---|
|
#18+
Допустим есть таблица, созданная вот так: 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 Вобщем посоветуйте как эти строки к одному виду привести. Что вообще делать, куда копать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2003, 15:29:38 |
|
||
|
Глюк varchar2 ?
|
|||
|---|---|---|---|
|
#18+
обе эти строки выглядят абсолютно одинакого, лишних пробелов в начале и конце нет последний запрос как раз и говорит о наличии лишних пробелов если импорт построчный, то надо использовать ltrim(rtrim()) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2003, 15:36:15 |
|
||
|
Глюк varchar2 ?
|
|||
|---|---|---|---|
|
#18+
update XXX set f1=rtrim(f1) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2003, 15:37:56 |
|
||
|
Глюк varchar2 ?
|
|||
|---|---|---|---|
|
#18+
Еще надо отключить уникальный ключ, если он есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2003, 15:43:24 |
|
||
|
Глюк varchar2 ?
|
|||
|---|---|---|---|
|
#18+
А проверь по коду символов, совпадают ли строки. А то достаточное количество русских/английских букв выглядят одинаково: Код: plaintext 1. Последние 2 поля совпадают по значениям? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2003, 15:53:55 |
|
||
|
Глюк varchar2 ?
|
|||
|---|---|---|---|
|
#18+
Ну хорошо, создать таблицу я могу и так: 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; Все пофигу. результат как описано выше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2003, 15:54:43 |
|
||
|
Глюк varchar2 ?
|
|||
|---|---|---|---|
|
#18+
Что-то непонятно что ты хочешь получить запросом :-) select * from xxx group by f1 order by f1; Данный запрос выдает все строки из таблицы f1. Если вам необходимы уникальные значения - используете distinct, а из вашей месаги трудно понять что вам надо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2003, 15:55:16 |
|
||
|
Глюк varchar2 ?
|
|||
|---|---|---|---|
|
#18+
Пацаны лоханулся. Вчера много водки выпил. Сам не понял что написал. select trim(f1) from xxx group by f1 order by f1; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2003, 16:00:33 |
|
||
|
Глюк varchar2 ?
|
|||
|---|---|---|---|
|
#18+
попутно к обсуждению основной темы: меня всегда интересовал вопрос - зачем order by при наличии group by ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2003, 16:06:53 |
|
||
|
Глюк varchar2 ?
|
|||
|---|---|---|---|
|
#18+
>попутно к обсуждению основной темы: меня всегда интересовал вопрос - >зачем order by при наличии group by не проверял, но думаю, что group by сортирует в binary order, а order by если не указано другого - в nls order. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2003, 16:09:06 |
|
||
|
Глюк varchar2 ?
|
|||
|---|---|---|---|
|
#18+
не проверял, но думаю, что group by сортирует в binary order, а order by если не указано другого - в nls order. Стандартный order by работает в соответствии с nls_lang/nls_territory/nls_sort. Для разных территорий возможны разные настройки. Для CIS - nls_sort=binary. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2003, 16:16:20 |
|
||
|
Глюк varchar2 ?
|
|||
|---|---|---|---|
|
#18+
select count(*), f1, dump(f1) from xxx group by f1 order by f1; Вот этот запрос многое прояснил. Там идет нулевой код (0), Оракл его нигде не отображает, вот я его и не выцепил. Вот теперь пробую его убить. to Vladimir, а впрочем уже ответили, я кстати тоже не проверял, но рещультаты сортировки иногда различны, а иногда и нет, да и привык я так писать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2003, 16:16:41 |
|
||
|
Глюк varchar2 ?
|
|||
|---|---|---|---|
|
#18+
Все! Всем спасибо, все пофиксил вот таким образом update xxx set f1=trim(both chr(0) from f1); p.s. А вот почему собственно так получилось, я попрежнему не понимаю. Связка MySQL-ODBC-Oracle в этом виновата или Excel-ODBC-Oracle... Ну да ладно, буду знать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2003, 16:22:56 |
|
||
|
Глюк varchar2 ?
|
|||
|---|---|---|---|
|
#18+
>Стандартный order by работает в соответствии с nls_lang/nls_territory/nls_sort. >Для разных территорий возможны разные настройки. Для CIS - nls_sort=binary. так это понятно, а как group by сортирует? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2003, 16:24:25 |
|
||
|
Глюк varchar2 ?
|
|||
|---|---|---|---|
|
#18+
Так что пробелы тут видимо не причём, это не CHAR в конце-концов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2003, 16:28:39 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=32169851&tid=1990330]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
193ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
31ms |
get tp. blocked users: |
1ms |
| others: | 222ms |
| total: | 483ms |

| 0 / 0 |
