Polecenie które zmieni w całej kolumnie litery na duże

0

Witam, zna ktoś może jakieś polecenie albo funkjce w php która pozwoli na zmiane w jednej kolumnie liter na same duże lub same małe? próbowałem użyć funkcji UPPER ale coś mi nie działało :/

7

Zależy, gdzie chcesz tę zmianę wprowadzić:

  1. w istniejących danych na bazie, to można prostym updatem:
    UPDATE tabelka SET atrybut=UPPER(atrybut);

  2. Przy wybieraniu wartości z bazy, to można zaaplikować funkcję bazodanową:
    SELECT UPPER(atrybut) FROM tabelka WHERE ....

  3. W aplikacji -> wspomniana przez @reinman funkcja z php.

  4. Czasem można namówić bazę, żeby traktowała wartości jako "case insensitive", ale to zależy od silnika i przypadku użycia.

0

Wykorzystałem funkcję w php od @reinman, dziękuję bardzo za pomoc! a pytanie mam jeszcze co do UPDATE tabelka SET atrybut=UPPER(atrybut) co w tym poleceniu jest atrybutem?

1

a jeśli chciałbym ograniczyć wprowadzanie danych tylko dużych liter w <input type="text" name="Nazwa1" value="&lt;?php echo $nzw1; ?">" size=36 maxlength="36"/> w takim polu, to jak miałbym to napisać?

Jeśli nie wiesz, jakie pole masz zmienić, to lepiej się do tego nie zabieraj.Znaczy to, że nie znasz bazy i zależności w niej. Być może wywołasz jakiś trigger...

0

jednak założenie miało być totalnie inne, posiadając w bazie danych wiersz o takiej treści "DZIAŁ GENERALNEGO PROJEKTANTA - G2" muszę stworzyć funkcję która będzie przerabiać ten tekst na tekst w takiej formie "Dział Generalnego Projektowania - G2" myślałem, czy jest możliwość użycia funkcji "initcap" tylko nie wiem jak wyciąć od prawej G2 do myślnika żeby zostawiał dużymi literami, może "RPAD"?

1

Jeżeli to jest standardowa budowa (tzn. zawsze jest tylko 1 myślnik) to "wytnij" szukany tekst do zmiany od początku komórki do myślnika np. przy użyciu CHARINDEX()
Coś jak:

INITCAP(LEFT([Nazwa]), CHARINDEX('-', [Nazwa])))
0

tak, jest tylko jeden myślnik, a jak to zaimplementować w kod php, bo próbuję coś takiego

$nzw1 = INITCAP(LEFT([Nazwa1]), CHARINDEX('-', [Nazwa1]));
0

No tak jak wyżej już ktoś pisał - całe zapytanie SQL powinno wyglądać:

UPDATE tabelka SET Nazwa=INITCAP(LEFT([Nazwa]), CHARINDEX('-', [Nazwa])))

Pytanie brzmi w ogóle jaka to baza ? Bo Initcap jest np w Oracle ale już w MS SQL nie ..

0

ciężko mi powiedzieć, bo nie ja to zakładałem, działam na systemie as400

0
$lowercaseTitle = strtolower($nzw1);
$nzw1 = ucwords($lowercaseTitle);

takie funkcje pozwalaja mi na wyswietlenie tego tak jak potrzebuję, ale nie wiem teraz jak napisac funkcje ktora pozwoli na zostawienie od prawej az do myslnika duzych liter

0
Drzewko96 napisał(a):

ciężko mi powiedzieć, bo nie ja to zakładałem, działam na systemie as400

Czyli IBM DB2.

0

dokładnie tak

0

update macborlib/adr set nazwa1=initcap(left(nazwa1), LOCATE ('-', nazwa1))

a błąd to:

Number of arguments for function LEFT not valid.

0

ehh no przeciez podajesz 1 argument w LEFT !

update macborlib/adr set nazwa1=initcap(left(nazwa1, LOCATE ('-', nazwa1)))
0

teraz usunęło mi te końcówki które potrzebowałem z dużej litery ;/

1

Propouje spędzić więcej czasu na testach i zabawie kodem niż pisaniem od razu tu :| Sprawdź co dostajesz takim zapytaniem ?

SELECT left(nazwa1, LOCATE ('-', nazwa1)) FROM macborlib/adr

Powinieneś mieć tylko treść do myślnika .. jeśli masz całość to może to wcale nie myślnik a inny znak ?

0

mam tylko treść do myślnika, ale ja potrzebuje rowniez te dane po myślniku mieć, tylko z dużyćh liter, czyli przykładowo, pierwszy rekord brzmi tak Prezes Zarzadu - a powinno być Prezes Zarządu - PZ a teraz w bazie zniknęły te wartości po znaku -

przekopiowałem od nowa stara baze i po wpisaniu SELECT left(nazwa1, LOCATE ('-', nazwa1)) FROM macborlib/adr wyświetla tak samo, tylko do pierwszego myślnika, a reszte zostawia, teraz musze jakos znaleźć sposób jak to obrobić, ale reszte zostawiał dużą

0

No i OK czyli "wyciąganie" tekstu do zmiany działa jak zakładano. To do tego należy dokleić resztę tekstu z komórki (przy pomocy CONCAT) :

SELECT CONCAT(INITCAP(LEFT(nazwa1, LOCATE ('-', nazwa1))), SUBSTR(nazwa1, LOCATE ('-', nazwa1) +1))  FROM macborlib/adr

Jeśli wyświetli poprawnie tak jak oczekiwano możesz budować UPDATE (jak testujesz zrób na 1 kodzie najpierw).

Edit: Czyli:
CONCAT - łączy strigni
SUBSTR - wyciąga część tekstu z innego tekstu - u Ciebie od myślnika (+1 żeby nie brać znów myślnika) do końca komórki
LEFT - bierze tekst od lwej do myślnika
INITCAP - zmienia wybrany tekst żeby była tylko 1 litera duża

0

polecenie działa tak jak powinno, a jak zaimplementować to w kodzie php teraz? żeby nie zmieniać w bazie a tylko wyświetlać w takiej formie?

$lewysql ="SELECT CONCAT(INITCAP(left(nazwa1, LOCATE ('-', nazwa1))), SUBSTR(nazwa1, LOCATE ('-', nazwa1) +1))  FROM macborlib/adr where kontob<1000";
		$stmt_lewysql = db2_query($conn, $lewysql);
		if (!$stmt_lewysql) {
                         print"Prepare Failed. Blad w odczycie bazy adr <br>";
                         exit();
                   } 
		$row_lewysql = db2_fetch_array($stmt_lewysql);

//echo $sql."<BR>";
$color=0;
while ($row = db2_fetch_array($stmt)) {
	//print_r($row);
	//print '<br>';

		
		$kntb = $row[0];	//kontoB
		$kntj = $row[1];	//kontoJ		
		$kntd = $row[2];	//kontoD
		$nzwskadr = $row[6]; //Nazwisko
		$skrnzw = $row[8];  // Nazwa skrócona
		$nzw1 = $row_lewysql;	// Nazwa 1
		$nzw2 = $row[13];	// Nazwa 2
		$jdorg =$row[24];   // Jedonstki Organizacyjne
		$aktyw =$row[20];   // Czy aktywna?
	
		
		print '<tr bgcolor='.(($color==0)?'silver':'lightcyan');
		$color=($color==0)?1:0;
		
		
		
		print '><td align=center><font size=3>'.$kntb.'</a></font></td>';
		print '<td align=center><font size=2>'.$kntj.'</font></td>';
		print '<td align=center><font size=2>'.$kntd.'</font></td>';
		print '<td align=center><font size=2>'.$nzwskadr.'</font></td>';
		print '<td align=center><font size=2>'.$skrnzw.'</font></td>';
		print '<td align=center><font size=2>'.$nzw1.'</font></td>';
		print '<td align=center><font size=2>'.$nzw2.'</font></td>';
		print '<td align=center><font size=2>'.$jdorg.'</font></td>';
	
		 
		print '<td>';
		

Dobrze to zrobiłem?

wywala mi tylko "array" czyli nazwe tablicy :/

a gdy zrobię

$nzw1 =$row_lewysql[0];   //Nazwa1

To wtedy tylko jeden rekord wyświetla :/

próbowałem na każdy sposób i jakoś nie wychodzi :/

edit:

Strone ogarnalem ,teraz walcze z tym aby zrobic update do bazy

0

pozwolę sobie dodać nowego posta, zamiast edytować tamtego po raz "x" wie ktoś może co w tym poleceniu robię nie tak? wywala mi taki błąd :/

update macborlib/adr set nazwa1=initcap(left(nazwa1, LOCATE ('-',nazwa1))), substr(nazwa1, locate ('-', nazwa1) +1)) where kontob =1                                                                   
Token ( was not valid. Valid tokens: =.

błąd podświetla "(" po funkcji substr

Próbuje na razie edytować tylko jeden rekord, żeby nie zepsuć całej bazy

0

Policz nawiasy

0

próbowałem już również, nadal ten sam problem

update macborlib/adr set nazwa1=initcap(left(nazwa1, LOCATE ('-',nazwa1))), substr(nazwa1, locate ('-', nazwa1) +1) where kontob=1                                                       

w takiej wersji rowniez wywala blad

dodaje screen, aby zobrazować jak wygląda błąd

zdjecie

0

Hmm ... no ale co Ty tu próbujesz zrobić ? Wstawiasz do nazwa1 = obropbiony tekst .... wstawiasz przecinek ... i znów jakiś tekst ?
Brakuje Ci CONCAT na początku... straszny bałagan :|

update macborlib/adr set 
nazwa1=CONCAT(initcap(left(nazwa1, LOCATE ('-',nazwa1))), substr(nazwa1, locate ('-', nazwa1) +1))
 where kontob=1 
0

Ahhhh, ten nieszczęsny CONCAT, przepraszam bardzo za tak błache dla Was problemy, muszę się zdecydowanie podszkolić :/
zadziałało, dziekuję

0

To nie kwestia błahych problemów .. tylko Twojego roztrzepania ... dostałeś już wcześniej wszystko zamiast po rzeźbić po sprawdzać - poddajesz się i piszesz tu.
I co gorsza jak dostałeś wcześniej podpowiedź co do funkcji jakich użyć nawet nie po googłałeś co to jest jak się ich używa - a to już jest kicha trochę. Nic to powodzenia w szkoleniu i więcej pracy własnej po podpowiedziach ;)
Temat można zamknąć jak sądzę.

0

kombinowałem ale chyba nie wystarczająco, musze sie bardziej zmotywować, dziekuje jeszcze raz

1 użytkowników online, w tym zalogowanych: 0, gości: 1