Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Witam! Mam taki problem odnośnie usuwania spacji:
Mam dane w bazie Mysql'a a dokładnie chodzi mi o kolumnę typu varchar w której mam wczytane kwoty:
np: 1 788.99
chciałbym usunąć tą spację pomiędzy 1 i 7 ( rekordów oczywiście jest bardzo dużo z różnymi kwotami ) ale kombinuje już pare godzin i niewiem co jest grane;
Najpierw próbowałem :
UPDATE tabelka SET kwota = replace(kwota, " ", "")
czy np UPDATE tabelka SET kwota = TRIM(kwota)
ale nic to nie daje. Oczywiście jeżeli inne kolumny próbuję tą metodą zamienić to jest OK!
Czyli wygląda na to że to nie jest spacja - tylko pytanie co??
Próbowałem także z poziomu php:
$zapytanie = "SELECT kwota FROM tabelka"; $wykonaj = mysql_query($zapytanie); while($wiersz=mysql_fetch_array ($wykonaj)) { echo $wiersz['kwota']."<br>"; $nowy = $wiersz['kwota']; $tescik = str_replace(" ", "", $nowy); // $tescik = trim($nowy); echo $tescik."<br>"; echo "TO jest test"; }
Ale wyświetla jedno pod drugim to samo - nie usuwa spacji.
Jedna rzecz jaką udało mi się zauważyć ( jak widać specjalnie dorzuciłem echo "TO jest test"; )
jak zmienię pod firefoxem kodowanie w widoku na UTF-8 to w tych kwotach w miejscach gdzie jest niby ta spacja
pojawia mi się znak - � czyli:
1�788.99
1�788.99
a pod spodem zwyczajne:
TO jest test
( bez żadnych dziwnych znaków tam gdzie spacje ) w związku z czym podejrzewam właśnie że to nie spacja jest w tych kwotach.
Spotkał się ktoś może z podobnym problemem??
Offline
może naookoło ale powinno zadziałać: rekord po rekordzie wczytujesz sobie kwotę, następnie konwersja to stringa, wycięcie spacji (nie pamiętam jak się funkcja nazywa bo php wieki nie używałem), wrzucenie nowej wartości do tabeli. Odpowiedni fragment kodu w bashu :))
echo "SELECT kwota FROM tabelka" |mysql -uUSER -pPASS |while read KWOTA do NOWA_KWOTA=$(echo "$KWOTA" |tr -d " ") echo "UPDATE tabelka SET kwota=\"$NOWA_KWOTA\" WHERE (tu musisz sobie warunek wymyślić :P)" |mysql -uUSER -pPASS done
Może nie jest to jakiś mega optymalny kod ale działający ;) przynajmniej u mnie działa podobny ;) Tak wiem chory jestem używać basha do obsługi mysqla ale tak mi było wygodnie i po drodze ;]
Offline
mysql> CREATE TABLE test(test varchar(10)); Query OK, 0 rows affected (0.01 sec) mysql> INSERT INTO test VALUES('test test'); Query OK, 1 row affected (0.00 sec) mysql> SELECT test FROM test; +-----------+ | test | +-----------+ | test test | +-----------+ 1 row in set (0.00 sec) mysql> UPDATE test SET test=REPLACE(test, ' ',''); Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> SELECT test FROM test; +----------+ | test | +----------+ | testtest | +----------+ 1 row in set (0.00 sec)
A teraz pokaż jak Ty to robisz i co Ci nie działa ;)
Tak BTW, do trzymania wartości liczbowych to są jednak lepsze typy niż varchar ;)
Ostatnio edytowany przez lessmian (2010-10-18 20:16:17)
Offline
w Bashu po wyświetleniu w miejscu gdzie normalnie jest spacja pokazuje się znak -
Wie ktoś może co to za znak i jak go zamienić??
Czyli generalnie kwota wygląda tak: 1▒788.99
Offline
Unicode wyróżnia przynajmniej [url=http://www.sagehill.net/docbookxsl/SpecialChars.html#SpecialSpaces]16 różnych spacji[/url]. To pewnie któraś z nich.
Ja bym ją w terminalu zaznaczył i wkleił (shift+insert lub środkowy klawisz myszy) w odpowiednim miejscu w sedzie czy czymś.
Offline
Time (s) | Query |
---|---|
0.00015 | SET CHARSET latin2 |
0.00004 | SET NAMES latin2 |
0.00138 | SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='18.191.129.241' WHERE u.id=1 |
0.00070 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '18.191.129.241', 1732669620) |
0.00042 | SELECT * FROM punbb_online WHERE logged<1732669320 |
0.00044 | SELECT topic_id FROM punbb_posts WHERE id=156298 |
0.00065 | SELECT id FROM punbb_posts WHERE topic_id=17548 ORDER BY posted |
0.00056 | SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=17548 AND t.moved_to IS NULL |
0.00006 | SELECT search_for, replace_with FROM punbb_censoring |
0.00076 | SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=17548 ORDER BY p.id LIMIT 0,25 |
0.00246 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=17548 |
Total query time: 0.00762 s |