SQL
Funzioni di stringa
Ricerca…
introduzione
Le funzioni stringa eseguono operazioni su valori stringa e restituiscono valori numerici o stringa.
Utilizzando le funzioni di stringa, è possibile, ad esempio, combinare dati, estrarre una sottostringa, confrontare stringhe o convertire una stringa in caratteri maiuscoli o minuscoli.
Sintassi
- CONCAT (string_value1, string_value2 [, string_valueN])
- LTRIM (character_expression)
- RTRIM (character_expression)
- SUBSTRING (espressione, inizio, lunghezza)
- ASCII (character_expression)
- REPLICATE (string_expression, integer_expression)
- REVERSE (string_expression)
- UPPER (character_expression)
- TRIM ([caratteri FROM] stringa)
- STRING_SPLIT (stringa, separatore)
- STUFF (character_expression, start, length, replaceWith_expression)
- REPLACE (string_expression, string_pattern, string_replacement)
Osservazioni
Riferimento di funzioni stringa per Transact-SQL / Microsoft
Taglia gli spazi vuoti
Trim è usato per rimuovere lo spazio di scrittura all'inizio o alla fine della selezione
In MSSQL non esiste un singolo TRIM()
SELECT LTRIM(' Hello ') --returns 'Hello '
SELECT RTRIM(' Hello ') --returns ' Hello'
SELECT LTRIM(RTRIM(' Hello ')) --returns 'Hello'
MySql e Oracle
SELECT TRIM(' Hello ') --returns 'Hello'
Concatenare
In SQL (standard ANSI / ISO), l'operatore per la concatenazione di stringhe è ||
. Questa sintassi è supportata da tutti i principali database tranne SQL Server:
SELECT 'Hello' || 'World' || '!'; --returns HelloWorld!
Molti database supportano una funzione CONCAT
per unire le stringhe:
SELECT CONCAT('Hello', 'World'); --returns 'HelloWorld'
Alcuni database supportano l'uso di CONCAT
per unire più di due stringhe (Oracle non lo fa):
SELECT CONCAT('Hello', 'World', '!'); --returns 'HelloWorld!'
In alcuni database, i tipi non stringa devono essere espressi o convertiti:
SELECT CONCAT('Foo', CAST(42 AS VARCHAR(5)), 'Bar'); --returns 'Foo42Bar'
Alcuni database (ad esempio Oracle) eseguono conversioni lossless implicite. Ad esempio, un CONCAT
su un CLOB
e NCLOB
produce un NCLOB
. Un CONCAT
su un numero e un varchar2
produce un varchar2
, ecc .:
SELECT CONCAT(CONCAT('Foo', 42), 'Bar') FROM dual; --returns Foo42Bar
Alcuni database possono utilizzare l'operatore non standard +
(ma in più, +
funziona solo per i numeri):
SELECT 'Foo' + CAST(42 AS VARCHAR(5)) + 'Bar';
Su SQL Server <2012, dove CONCAT
non è supportato, +
è l'unico modo per unire le stringhe.
Maiuscole e minuscole
SELECT UPPER('HelloWorld') --returns 'HELLOWORLD'
SELECT LOWER('HelloWorld') --returns 'helloworld'
substring
La sintassi è: SUBSTRING ( string_expression, start, length )
. Si noti che le stringhe SQL sono 1-indicizzate.
SELECT SUBSTRING('Hello', 1, 2) --returns 'He'
SELECT SUBSTRING('Hello', 3, 3) --returns 'llo'
Questo è spesso usato in congiunzione con la funzione LEN()
per ottenere gli ultimi n
caratteri di una stringa di lunghezza sconosciuta.
DECLARE @str1 VARCHAR(10) = 'Hello', @str2 VARCHAR(10) = 'FooBarBaz';
SELECT SUBSTRING(@str1, LEN(@str1) - 2, 3) --returns 'llo'
SELECT SUBSTRING(@str2, LEN(@str2) - 2, 3) --returns 'Baz'
Diviso
Divide un'espressione di stringa usando un separatore di caratteri. Nota che STRING_SPLIT()
è una funzione con valori di tabella.
SELECT value FROM STRING_SPLIT('Lorem ipsum dolor sit amet.', ' ');
Risultato:
value
-----
Lorem
ipsum
dolor
sit
amet.
Cose
Inserisci una stringa in un'altra, sostituendo 0 o più caratteri in una determinata posizione.
Nota: la posizione start
è 1-indicizzata (si inizia l'indicizzazione a 1, non a 0).
Sintassi:
STUFF ( character_expression , start , length , replaceWith_expression )
Esempio:
SELECT STUFF('FooBarBaz', 4, 3, 'Hello') --returns 'FooHelloBaz'
Lunghezza
server SQL
La LEN non conta lo spazio finale.
SELECT LEN('Hello') -- returns 5
SELECT LEN('Hello '); -- returns 5
Il DATALENGTH conta lo spazio finale.
SELECT DATALENGTH('Hello') -- returns 5
SELECT DATALENGTH('Hello '); -- returns 6
Si noti tuttavia che DATALENGTH restituisce la lunghezza della rappresentazione di byte sottostante della stringa, che dipende, tra l'altro, dal set di caratteri utilizzato per memorizzare la stringa.
DECLARE @str varchar(100) = 'Hello ' --varchar is usually an ASCII string, occupying 1 byte per char
SELECT DATALENGTH(@str) -- returns 6
DECLARE @nstr nvarchar(100) = 'Hello ' --nvarchar is a unicode string, occupying 2 bytes per char
SELECT DATALENGTH(@nstr) -- returns 12
Oracolo
Sintassi: lunghezza (carattere)
Esempi:
SELECT Length('Bible') FROM dual; --Returns 5
SELECT Length('righteousness') FROM dual; --Returns 13
SELECT Length(NULL) FROM dual; --Returns NULL
Vedi anche: LunghezzaB, LunghezzaC, Lunghezza2, Lunghezza4
Sostituire
Sintassi:
REPLACE(
stringa da cercare ,
stringa da cercare e sostituire ,
stringa da inserire nella stringa originale )
Esempio:
SELECT REPLACE( 'Peter Steve Tom', 'Steve', 'Billy' ) --Return Values: Peter Billy Tom
SINISTRA DESTRA
La sintassi è:
SINISTRA (espressione-stringa, intero)
RIGHT (espressione-stringa, intero)
SELECT LEFT('Hello',2) --return He
SELECT RIGHT('Hello',2) --return lo
Oracle SQL non ha le funzioni LEFT e RIGHT. Possono essere emulati con SUBSTR e LENGTH.
SUBSTR (string-expression, 1, intero)
SUBSTR (string-expression, length (string-expression) -integer + 1, intero)
SELECT SUBSTR('Hello',1,2) --return He
SELECT SUBSTR('Hello',LENGTH('Hello')-2+1,2) --return lo
INVERSO
La sintassi è: REVERSE (espressione di stringa)
SELECT REVERSE('Hello') --returns olleH
REPLICARE
La funzione REPLICATE
concatena una stringa con se stessa un numero specificato di volte.
La sintassi è: REPLICATE (string-expression, integer)
SELECT REPLICATE ('Hello',4) --returns 'HelloHelloHelloHello'
REGEXP
Controlla se una stringa corrisponde a un'espressione regolare (definita da un'altra stringa).
SELECT 'bedded' REGEXP '[a-f]' -- returns True
SELECT 'beam' REGEXP '[a-f]' -- returns False
Sostituisci la funzione in sql Seleziona e aggiorna la query
La funzione Sostituisci in SQL viene utilizzata per aggiornare il contenuto di una stringa. La chiamata di funzione è REPLACE () per MySQL, Oracle e SQL Server.
La sintassi della funzione Replace è:
REPLACE (str, find, repl)
L'esempio seguente sostituisce le occorrenze di South
e Southern
nella tabella Impiegati:
Nome di battesimo | Indirizzo |
---|---|
Giacomo | South New York |
John | South Boston |
Michael | South San Diego |
Seleziona istruzione:
Se applichiamo la seguente funzione di sostituzione:
SELECT
FirstName,
REPLACE (Address, 'South', 'Southern') Address
FROM Employees
ORDER BY FirstName
Risultato:
Nome di battesimo | Indirizzo |
---|---|
Giacomo | Southern New York |
John | Boston meridionale |
Michael | San Diego del sud |
Dichiarazione di aggiornamento:
Possiamo utilizzare una funzione di sostituzione per apportare modifiche permanenti nella nostra tabella attraverso il seguente approccio.
Update Employees
Set city = (Address, 'South', 'Southern');
Un approccio più comune è quello di utilizzare questo in combinazione con una clausola WHERE come questa:
Update Employees
Set Address = (Address, 'South', 'Southern')
Where Address LIKE 'South%';
ParseName
DATABASE : SQL Server
La funzione PARSENAME restituisce la parte specifica della stringa data (nome dell'oggetto). il nome dell'oggetto può contenere stringhe come nome oggetto, nome proprietario, nome database e nome server.
Maggiori dettagli MSDN: PARSENAME
Sintassi
PARSENAME('NameOfStringToParse',PartIndex)
Esempio
Per ottenere il nome dell'oggetto utilizzare l'indice della parte 1
SELECT PARSENAME('ServerName.DatabaseName.SchemaName.ObjectName',1) // returns `ObjectName`
SELECT PARSENAME('[1012-1111].SchoolDatabase.school.Student',1) // returns `Student`
Per ottenere il nome dello schema utilizzare l'indice della parte 2
SELECT PARSENAME('ServerName.DatabaseName.SchemaName.ObjectName',2) // returns `SchemaName`
SELECT PARSENAME('[1012-1111].SchoolDatabase.school.Student',2) // returns `school`
Per ottenere il nome del database utilizzare l'indice della parte 3
SELECT PARSENAME('ServerName.DatabaseName.SchemaName.ObjectName',3) // returns `DatabaseName`
SELECT PARSENAME('[1012-1111].SchoolDatabase.school.Student',3) // returns `SchoolDatabase`
Per ottenere il nome del server utilizzare l'indice della parte 4
SELECT PARSENAME('ServerName.DatabaseName.SchemaName.ObjectName',4) // returns `ServerName`
SELECT PARSENAME('[1012-1111].SchoolDatabase.school.Student',4) // returns `[1012-1111]`
PARSENAME restituisce null è specificato parte non è presente nella stringa nome oggetto specificata
INSTR
Restituisce l'indice della prima occorrenza di una sottostringa (zero se non trovata)
Sintassi: INSTR (stringa, sottostringa)
SELECT INSTR('FooBarBar', 'Bar') -- return 4
SELECT INSTR('FooBarBar', 'Xar') -- return 0