|
Тема
|
order by nomer - когато е стринг
|
|
Автор | 123 (Нерегистриран) |
Публикувано | 16.07.07 17:59 |
|
Работя с Firebird 1.5 създал съм поле(varchar) за номер на документ. Грешката ми е при проектирането-трябваше да е Integer. Сега си бера последствията-
не мога да сортирам по този номер, защото 10 го слага преди 3, защото почва с едно. Не мога да дропна полето и да го създам наново с правилния тип, защото клиентите работят отдавна и са писали много данни.
Има ли измъкване от ситуацията? Или да отписвам "order by" за това поле?
| |
Тема
|
Re: order by nomer - когато е стринг
[re: 123]
|
|
Автор |
bira_more (бира) |
Публикувано | 16.07.07 18:20 |
|
добавяш поле тип Int.
Копираш съдържанието от едното в другото поле - в MySQL - няма да имаш грижи - за фиребърд - не знам.
Дропваш полето което не ти трябва, перименуваш Инт полето - и си в бизнеса :)
Е преди началото на упражненията - задължително архивно копие.
Bеer? Mоre?
| |
Тема
|
cast + view
[re: 123]
|
|
Автор | Heh (Нерегистриран) |
Публикувано | 16.07.07 18:45 |
|
Правиш си view, кастваш до integer и след това си бачкаш с view-то, където можеш да сортираш както си искаш ...
| |
Тема
|
Re: cast + view
[re: Heh]
|
|
Автор |
AйeзCeдaй ((бойна)) |
Публикувано | 17.07.07 09:29 |
|
не, по-добрият вариант е на бирата.
| |
Тема
|
Re: order by nomer - когато е стринг
[re: 123]
|
|
Автор |
killall (Дядо Мраз) |
Публикувано | 17.07.07 12:28 |
|
select cast(typoto_pole as integer), drugi_poleta
from tablicite
order by 1
Time is like a drug, too much of it kills you
| |
Тема
|
Re: order by nomer - когато е стринг
[re: 123]
|
|
Автор |
bandy (познат) |
Публикувано | 01.09.07 00:48 |
|
хм, в MySQL има една команда, която се казва:
ALTER TABLE,
твърде сигурен съм че я има във всяка нормална база от данни ...
и ако във въпросното поле наистина има само цифри то съвсем спокойно, мисля ще мине един обикновен:
ALTER TABLE table_name CHANGE old_col_name column_definition
naprimer
ALTER TABLE test CHANGE nomer_doc nomer_doc INT not null default 0
....
Онези упражнения за премятаници, за цастове, за view-ta смятам че са излишни ...
| |
Тема
|
Re: order by nomer - когато е стринг
[re: bandy]
|
|
Автор |
bira_more (бира) |
Публикувано | 04.09.07 17:01 |
|
Така обаче може да е... мамата на данните.
Bеer? Mоre?
| |
Тема
|
Re: order by nomer - когато е стринг
[re: bandy]
|
|
Автор |
AйeзCeдaй ((бойна)) |
Публикувано | 05.09.07 15:29 |
|
В оракула не е така.
За да направиш ALTER TABLE table_name MODIFY strFIELD NUMBER(5)
ще ти изгърми с грешка ora-01439, т.е че колоната трябва да ти е празна.
Решението е както е писал Бирата по-горе.
Правиш ново поле number(10) примерно. Копираш там всичко от стринг полето. Предварително обаче всички данни ги конвертираш към number. И там ще стане красотата.
10 6 и 106 с конвертиране към number ще ти гръмне (to_number).
Ако пък не - всичко е просто, лесно и пей сърце....
П.С. Обаче от моят опит никога не е така.
| |
Тема
|
Re: order by nomer - когато е стринг
[re: AйeзCeдaй]
|
|
Автор |
killall (Дядо Мраз) |
Публикувано | 05.09.07 19:15 |
|
И в Interbase не може с alter table да се смени varchar с integer. Може само да се смени с по-"голям" varchar.
Ако има тригери или stored процедури които ползват въпросното поле не може и да го дроп-не, ще даде грешка че има dependencies. Ако са само няколко тригери/процедури може временно да ги дроп-не, да проложи варианта на бирата и после пак да ги сложи, но ако са повече става доста трудоемко.
Между другото варианта на бирата няма да работи, Интербейс не дава да се преименува полето, трябва да си направи ново поле тип integer, да си копира данните там, да дроп-не старото поле, после да създаде ново поле пак тип integer и със същото име като старото, пак да копира всичко и да изтрие накрая излишното.
Time is like a drug, too much of it kills youРедактирано от killall на 05.09.07 19:18.
| |
Тема
|
Re: order by nomer - когато е стринг
[re: killall]
|
|
Автор |
AйeзCeдaй ((бойна)) |
Публикувано | 06.09.07 09:25 |
|
Именно, това ми беше идеята, но не съм я описала, написала като хората
| |
|
|
|
|