Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Konwersja wynikow liczbowych i skopiowanie ich do drugiej kolumny
Forum PHP.pl > Forum > Bazy danych > MySQL
lexis72
Witam,
Mam w bazie kolumne z wynikami w postaci liczbowej zapisane w formie A,BB,CCC gdzie przykladowe wyniki wygladaja np 1,33,656 lub 1,20,356. Zrobilem teraz druga kolumne i chcialbym skopiowac do niej wszystkie te wyniki ale w takiej formie XX.ZZZ gdzie zaprezentowane powyzej wyniki wygladalyby tak: 93.656 lub 80.356. Mozna wiec powiedziec ze wyniki zapisane w formie minut, sekund i tysiecznych sekundy przedzielone przecinkami chcialbym przeksztalcic i przekopiowac do drugiej kolumny w postaci sekund i tysiecznych sekundych przedzielonych kropka. Czy macie jakies pomysly jak to zrobic?
Z gory dzieki za zainteresowanie. Pozdrawiam.
matiit
  1. INSERT INTO nowa_tabela (kolumna) VALUES(
  2. REPLACE(',', '.', (SELECT kolumna FROM stara_tabela WHERE 1))
  3. );
  4.  

Coś takiego powinno działać (nie sprawdzałem).


@nospor - jejku racja smile.gif

select REPLACE(...) powinno być

A wracając do problemu - wg mnie szybciej będzie to napisać po prostu w PHP/innym języku niż sql niż wymyślać skomplikowane zapytanie.
nospor
@matiit przeczytaj jeszcze raz uważnie problem a dowiesz się, że zamiana przecinków na kropki nie jest rozwiązaniem smile.gif

A nawet jeśli by o to chodziło, to REPLACE ma być na poziomie SELECT a nie na odwrót

Cytat
A wracając do problemu - wg mnie szybciej będzie to napisać po prostu w PHP/innym języku niż sql niż wymyślać skomplikowane zapytanie.
Pobranie danych, obrobienie ich w php, i ponowne walenie zapytań nie będzie szybsze od jednego zapytania mysql.
matiit
Będzie to szybciej napisać. Ale będzie działać dłużej.
Ja niestety z tym nie pomogę (SQL) za słabo znam.
pmir13
Proponuję takiego potworka:

  1. INSERT INTO nowa_tabela(kolumna)
  2. SELECT concat_ws('.',
  3. substring_index(substring_index(kolumna,',',-2),',',1)+60*REPLACE(kolumna,substring_index(kolumna,',',-2),''),
  4. substring_index( kolumna, ',', -1 )
  5. )
  6. FROM stara_tabela

mmmmmmm
ta funkcja:
  1. SELECT str_to_date('1,33,656','%i,%s,%f')
zwróci ci 00:01:33.656000
Dalej możesz kombinować np z time_to_sec()
lexis72
PMIR13 jestes wielki wszystko dziala i konwertuje wyniki tak jak chcialem smile.gif
Mam jeszcze tylko jeden problem zwiazany z tym ze 2 kolumna ktora utworzylem znajduje sie w tej samej tabeli i zalezy mi aby kazdy poczatkowy wynik byl w ten sposob kopiowany do 2 kolumny w tym samym wierszu a te zapytanie insertuje te wyniki na sam dol zostawiajac puste wszystkie pozostale kolumny. Mniemam ze musze zmienic te zapytanie w takim razie na update ale kombinuje z tym i ciagle wywala bledy ;/

Graficznie tabela ma taka strukture: (nastepujace kolumny)

AAA | BBB | CCC | wynik | wynik2 | DDD | EEE
1 wiersz
2 wiersz
3 wiersz
....

Czyli utworzylem kolumne wynik2 do ktorej chce przeniesc wynik w takiej postaci jak podalem wyzej. A te zapytanie tworzy mi na dole nowe wiersze z wynik2 w takiej formie jaka chce ale jak zrobic zeby ten wynik2 towrzony byl w tym samym wierszu co pobierany wynik.

Dzieki i pozdrawiam smile.gif
pmir13
  1. UPDATE tabela
  2. SET wynik2 = concat_ws( [TO samo co wczesniej] )

Oczywiście zamieniając wszystkie wystąpienia 'kolumna' na 'wynik'.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.