Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Trasformazione di maiuscole e minuscole

28 views
Skip to first unread message

Giovanni

unread,
Jan 19, 2003, 1:28:19 PM1/19/03
to

Un saluto a tutti. Ho dei campi con inserito dei nomi tutto in maiuscolo (
es. GIOVANNI GAVAZZI) è possibile aggiornare questi campi ed ottenere il
seguente risultato: "Giovanni Gavazzi"?
Grazie e ciao
Giovanni


Lorenzo Benaglia

unread,
Jan 19, 2003, 3:53:25 PM1/19/03
to
"Giovanni" <giov...@tiscalinet.it> wrote in message
news:eYkcni#vCHA.1656@TK2MSFTNGP09...

Ciao Giovanni,

> Un saluto a tutti. Ho dei campi con inserito dei nomi tutto in maiuscolo (
> es. GIOVANNI GAVAZZI) è possibile aggiornare questi campi ed ottenere il
> seguente risultato: "Giovanni Gavazzi"?

Prima di proporre una soluzione al tuo quesito, volevo ricordarti che
memorizzare due o più informazioni (nome e cognome) in un unico campo, va
contro la prima forma normale:

La Prima Forma Normale (First Normal Form) richiede che tutti i valori
memorizzati in una colonna siano atomici. In altre parole ogni colonna deve
contenere un singolo valore *non* una lista di valori.
Inoltre è richiesto che in una tabella non esistano gruppi di colonne
ripetute.

Prova a pensare di dover ordinare i tuoi dati per cognome... come fai se il
campo Nominativo contiene Nome + Cognome?
Oppure recuperare solo il cognome con una query?

OK, ora veniamo al tuo problema specifico.
SQL Server non offre in modo nativo una funzione in grado di capitalizzare
una stringa, però puoi giocare con le altre funzioni per ottenere lo stesso
effetto.
Dato che il tuo aggiornamento sarà "one shot", ho pensato di scrivere
direttamente il codice di conversione senza creare una procedura Ad-hoc. Se
invece preferisci una soluzione più generica, su
http://www.sqlmag.com/Articles/Index.cfm?ArticleID=14117 troverai una
interessante procedura scitta da Neil Pike.

Esempio:

USE Northwind
GO

/* Creo la tabella dbo.Students
** (anche se vado contro la 1NF :-))
*/
CREATE TABLE dbo.Students(
StudentID int NOT NULL IDENTITY PRIMARY KEY,
FullName varchar(50) NOT NULL
)
GO

/* La popolo */
INSERT dbo.Students VALUES('LORENZO BENAGLIA')
INSERT dbo.Students VALUES('GIOVANNI GAVAZZI')
INSERT dbo.Students VALUES('LUCA BIANCHI')
INSERT dbo.Students VALUES('GIANLUCA HOTZ')
GO

/* Verifica */
SELECT *
FROM dbo.Students
GO

/* Aggiorno la tabella dbo.Students
** capitalizzando il campo FullName
*/
UPDATE dbo.Students
SET FullName = S1.CapitalizedFullName
FROM
(SELECT StudentID,
/* Iniziale nome */
LEFT(FullName, 1) +
/* Restante parte del nome */
LOWER(SUBSTRING(FullName, 2, CHARINDEX(' ', FullName) - 1)) +
/* Iniziale cognome */
SUBSTRING(FullName, CHARINDEX(' ', FullName) + 1, 1) +
/* Restante parte del cognome */
LOWER(RIGHT(FullName, LEN(FullName) - CHARINDEX(' ', FullName) - 1))
CapitalizedFullName
FROM dbo.Students) S1 JOIN dbo.Students S2
ON S1.StudentID = S2.StudentID
GO

/* Verifica */
SELECT *
FROM dbo.Students
GO

/* Pulizia */
DROP TABLE dbo.Students


> Grazie e ciao
Prego.

Ciao!

--
Lorenzo Benaglia
UGIdotNET - http://www.ugidotnet.org
UGISS - http://www.ugiss.org


0 new messages