Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql] Pierwsza litera z wyrazu
Forum PHP.pl > Forum > Bazy danych > MySQL
skowron-line
Witam czy da się za pomocą MySQL wyciągnąć pierwsza literę z każdego wyrazu w komórcę questionmark.gif
blooregard
SUBSTRING

http://dev.mysql.com/doc/refman/5.0/en/str...ction_substring
skowron-line
Cytat(blooregard @ 17.11.2009, 16:41:35 ) *


smile.gif A jak to zastosować do wielu wyrazów questionmark.gif Bo 1 literę z jednego wyrazu można pobrać przez LEFT chociażby. A co jeżeli mam kilka wyrazów.
maly_swd
A jak bys to przerobil? Ta funkcja robi pierwsze wielkie litery:) wiec wystarczy tylko mala poprawka
  1. DELIMITER $$
  2.  
  3. DROP FUNCTION IF EXISTS `ICap`$$
  4.  
  5. CREATE FUNCTION `ICap`(mystring varchar(1000))
  6. RETURNS VARCHAR(1000)
  7. BEGIN
  8.  
  9. DECLARE i INT DEFAULT 1;
  10. DECLARE myc, pc CHAR(1);
  11. DECLARE myoutstring VARCHAR(1000) DEFAULT LOWER(mystring);
  12.  
  13. WHILE i <= CHAR_LENGTH(mystring) DO
  14. SET myc = SUBSTRING(mystring, i, 1);
  15. SET pc = CASE WHEN i = 1 THEN ' ' ELSE SUBSTRING(mystring, i - 1, 1) END;
  16. IF pc IN (' ', '&', '''', '_', '?', ';', ':', '!', ',', '-', '/', '(', '.') THEN
  17. SET myoutstring = INSERT(myoutstring, i, 1, UPPER(myc));
  18. END IF;
  19. SET i = i + 1;
  20. END WHILE;
  21.  
  22. RETURN myoutstring;
  23.  
  24. END$$
  25.  
  26. DELIMITER ;
  27.  
blooregard
Cytat
A jak to zastosować do wielu wyrazów

Źle Cię zrozumiałem, miałeś na myśli wiele wyrazów w jednej komórce, a nie pojedyńcze wyrazy smile.gif
maly_swd
cos takiego naskrobalem, trzeba to zoptymalizowac ale dziala;)
  1. DELIMITER $$
  2.  
  3. DROP FUNCTION IF EXISTS `xml`.`moja` $$
  4. CREATE FUNCTION `moja`(mystring varchar(1000)) RETURNS varchar(1000) CHARSET utf8
  5. BEGIN
  6.  
  7. DECLARE i INT DEFAULT 1;
  8. DECLARE myc, pc CHAR(1);
  9. DECLARE myoutstring,tmp VARCHAR(1000) DEFAULT LOWER(mystring);
  10. Set tmp='';
  11.  
  12. WHILE i <= CHAR_LENGTH(mystring) DO
  13. SET myc = SUBSTRING(mystring, i, 1);
  14. SET pc = CASE WHEN i = 1 THEN ' ' ELSE SUBSTRING(mystring, i - 1, 1) END;
  15. IF pc IN (' ', '&', '''', '_', '?', ';', ':', '!', ',', '-', '/', '(', '.') THEN
  16. SET tmp= concat(tmp, myc);
  17. END IF;
  18. SET i = i + 1;
  19. END WHILE;
  20.  
  21. RETURN tmp;
  22.  
  23. END $$
  24.  
  25. DELIMITER ;
skowron-line
Okazało się że nie będzie kilka wyrazów tylko kilka w sensie 2
  1. SELECT LEFT( nazwa, 1 ) AS pierwsza_litera_pierwszy_wyraz, substring( nazwa, locate( " ", nazwa ) +1, 1 ) AS pierwsza_litera_drugi_wyraz

Więc tak to załatwiłem. Ale dzięki za chęci pomocy.
@maly_swd lol
maly_swd
smile.gif - dodam iz ta przerobiona funkcja juz mi sie do czegos przydala;)
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.