Szukaj…
Wprowadzenie
Funkcje łańcuchowe wykonują operacje na wartościach łańcuchowych i zwracają wartości liczbowe lub łańcuchowe.
Korzystając z funkcji ciągów, możesz na przykład łączyć dane, wyodrębniać podłańcuch, porównywać ciągi lub konwertować ciąg na wszystkie wielkie i małe litery.
Składnia
- CONCAT (string_value1, string_value2 [, string_valueN])
- LTRIM (wyrażenie_wyrażenia)
- RTRIM (wyrażenie_wyrażenia)
- SUBSTRING (wyrażenie, początek, długość)
- ASCII (wyrażenie_wyrażenia)
- REPLICATE (wyrażenie_łańcuchowe, wyrażenie_całkowate)
- REVERSE (wyrażenie_łańcuchowe)
- UPPER (wyrażenie_wyrażenia)
- TRIM (ciąg znaków [z FROM])
- STRING_SPLIT (ciąg, separator)
- STUFF (wyrażenie_wyrażeniowe, początek, długość, zastąpienie_wyrażeniem)
- REPLACE (string_expression, string_pattern, string_replacement)
Uwagi
Odwołanie do funkcji łańcuchowych dla Transact-SQL / Microsoft
Przycinaj puste przestrzenie
Przycinanie służy do usuwania miejsca do zapisu na początku lub na końcu zaznaczenia
W MSSQL nie ma pojedynczego TRIM()
SELECT LTRIM(' Hello ') --returns 'Hello '
SELECT RTRIM(' Hello ') --returns ' Hello'
SELECT LTRIM(RTRIM(' Hello ')) --returns 'Hello'
MySql i Oracle
SELECT TRIM(' Hello ') --returns 'Hello'
Powiązać
W SQL (standard ANSI / ISO) operatorem konkatenacji łańcuchów jest ||
. Ta składnia jest obsługiwana przez wszystkie główne bazy danych oprócz SQL Server:
SELECT 'Hello' || 'World' || '!'; --returns HelloWorld!
Wiele baz danych obsługuje funkcję CONCAT
do łączenia ciągów:
SELECT CONCAT('Hello', 'World'); --returns 'HelloWorld'
Niektóre bazy danych obsługują CONCAT
do łączenia więcej niż dwóch ciągów (Oracle nie):
SELECT CONCAT('Hello', 'World', '!'); --returns 'HelloWorld!'
W niektórych bazach danych typy nieciągłe muszą być rzutowane lub konwertowane:
SELECT CONCAT('Foo', CAST(42 AS VARCHAR(5)), 'Bar'); --returns 'Foo42Bar'
Niektóre bazy danych (np. Oracle) wykonują niejawne konwersje bezstratne. Na przykład CONCAT
na CLOB
i NCLOB
daje NCLOB
. CONCAT
na liczbie i varchar2
powoduje, że varchar2
itp .:
SELECT CONCAT(CONCAT('Foo', 42), 'Bar') FROM dual; --returns Foo42Bar
Niektóre bazy danych mogą używać niestandardowego operatora +
(ale w większości +
działa tylko dla liczb):
SELECT 'Foo' + CAST(42 AS VARCHAR(5)) + 'Bar';
Na SQL Server <2012, gdzie CONCAT
nie jest obsługiwany, +
jest jedynym sposobem łączenia ciągów.
Wielkie i małe litery
SELECT UPPER('HelloWorld') --returns 'HELLOWORLD'
SELECT LOWER('HelloWorld') --returns 'helloworld'
Podciąg
Składnia to: SUBSTRING ( string_expression, start, length )
. Zauważ, że ciągi SQL są indeksowane 1.
SELECT SUBSTRING('Hello', 1, 2) --returns 'He'
SELECT SUBSTRING('Hello', 3, 3) --returns 'llo'
Jest to często używane w połączeniu z funkcją LEN()
aby uzyskać ostatnie n
znaków ciągu o nieznanej długości.
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'
Rozdzielać
Dzieli wyrażenie łańcuchowe za pomocą separatora znaków. Zauważ, że STRING_SPLIT()
jest funkcją wycenianą w tabeli.
SELECT value FROM STRING_SPLIT('Lorem ipsum dolor sit amet.', ' ');
Wynik:
value
-----
Lorem
ipsum
dolor
sit
amet.
Rzeczy
Umieść łańcuch w innym, zastępując 0 lub więcej znaków na określonej pozycji.
Uwaga: pozycja start
jest indeksowana 1 (indeksowanie rozpoczyna się od 1, a nie 0).
Składnia:
STUFF ( character_expression , start , length , replaceWith_expression )
Przykład:
SELECT STUFF('FooBarBaz', 4, 3, 'Hello') --returns 'FooHelloBaz'
Długość
SQL Server
LEN nie liczy końcowej spacji.
SELECT LEN('Hello') -- returns 5
SELECT LEN('Hello '); -- returns 5
DATALENGTH liczy końcowe miejsce.
SELECT DATALENGTH('Hello') -- returns 5
SELECT DATALENGTH('Hello '); -- returns 6
Należy jednak zauważyć, że DATALENGTH zwraca długość podstawowej bajtu reprezentacji ciągu, która zależy między innymi od zestawu znaków używanego do przechowywania ciągu.
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
Wyrocznia
Składnia: długość (char)
Przykłady:
SELECT Length('Bible') FROM dual; --Returns 5
SELECT Length('righteousness') FROM dual; --Returns 13
SELECT Length(NULL) FROM dual; --Returns NULL
Zobacz także: LengthB, LengthC, Length2, Length4
Zastąpić
Składnia:
REPLACE(
Ciąg do wyszukiwania ,
Ciąg do wyszukiwania i zamiany ,
Ciąg do umieszczenia w oryginalnym ciągu )
Przykład:
SELECT REPLACE( 'Peter Steve Tom', 'Steve', 'Billy' ) --Return Values: Peter Billy Tom
LEWO PRAWO
Składnia to:
LEWO (wyrażenie-ciąg, liczba całkowita)
PRAWO (wyrażenie-ciąg, liczba całkowita)
SELECT LEFT('Hello',2) --return He
SELECT RIGHT('Hello',2) --return lo
Oracle SQL nie ma funkcji LEWEJ i PRAWEJ. Można je emulować za pomocą SUBSTR i LENGTH.
SUBSTR (wyrażenie-ciąg, 1, liczba całkowita)
SUBSTR (wyrażenie-ciąg, długość (wyrażenie-ciąg) -integer + 1, liczba całkowita)
SELECT SUBSTR('Hello',1,2) --return He
SELECT SUBSTR('Hello',LENGTH('Hello')-2+1,2) --return lo
REWERS
Składnia to: REVERSE (wyrażenie-ciąg)
SELECT REVERSE('Hello') --returns olleH
REPLIKA
Funkcja REPLICATE
konkatenuje łańcuch ze sobą określoną liczbę razy.
Składnia to: REPLICATE (wyrażenie-ciąg, liczba całkowita)
SELECT REPLICATE ('Hello',4) --returns 'HelloHelloHelloHello'
REGEXP
Sprawdza, czy ciąg pasuje do wyrażenia regularnego (zdefiniowanego przez inny ciąg).
SELECT 'bedded' REGEXP '[a-f]' -- returns True
SELECT 'beam' REGEXP '[a-f]' -- returns False
Zamień funkcję w SQL Wybierz i zaktualizuj zapytanie
Funkcja Zamień w SQL służy do aktualizacji zawartości łańcucha. Wywołanie funkcji to REPLACE () dla MySQL, Oracle i SQL Server.
Składnia funkcji Zamień jest następująca:
REPLACE (str, find, repl)
Poniższy przykład zamienia wystąpienia South
Southern
w tabeli Pracownicy:
Imię | Adres |
---|---|
James | Południowy Nowy Jork |
Jan | South Boston |
Michael | South San Diego |
Wybierz oświadczenie:
Jeśli zastosujemy następującą funkcję Zamień:
SELECT
FirstName,
REPLACE (Address, 'South', 'Southern') Address
FROM Employees
ORDER BY FirstName
Wynik:
Imię | Adres |
---|---|
James | Południowy Nowy Jork |
Jan | Południowy Boston |
Michael | Południowe San Diego |
Aktualizacja oświadczenia:
Możemy użyć funkcji zamiany, aby wprowadzić trwałe zmiany w naszej tabeli poprzez następujące podejście.
Update Employees
Set city = (Address, 'South', 'Southern');
Bardziej powszechnym podejściem jest użycie tego w połączeniu z klauzulą WHERE, taką jak ta:
Update Employees
Set Address = (Address, 'South', 'Southern')
Where Address LIKE 'South%';
PARSENAME
BAZA DANYCH : SQL Server
Funkcja PARSENAME zwraca określoną część podanego ciągu (nazwa obiektu). nazwa obiektu może zawierać ciąg znaków, taki jak nazwa obiektu, nazwa właściciela, nazwa bazy danych i nazwa serwera.
Więcej informacji MSDN: PARSENAME
Składnia
PARSENAME('NameOfStringToParse',PartIndex)
Przykład
Aby uzyskać nazwę obiektu, użyj indeksu części 1
SELECT PARSENAME('ServerName.DatabaseName.SchemaName.ObjectName',1) // returns `ObjectName`
SELECT PARSENAME('[1012-1111].SchoolDatabase.school.Student',1) // returns `Student`
Aby uzyskać nazwę schematu, użyj indeksu części 2
SELECT PARSENAME('ServerName.DatabaseName.SchemaName.ObjectName',2) // returns `SchemaName`
SELECT PARSENAME('[1012-1111].SchoolDatabase.school.Student',2) // returns `school`
Aby uzyskać nazwę bazy danych, użyj indeksu części 3
SELECT PARSENAME('ServerName.DatabaseName.SchemaName.ObjectName',3) // returns `DatabaseName`
SELECT PARSENAME('[1012-1111].SchoolDatabase.school.Student',3) // returns `SchoolDatabase`
Aby uzyskać nazwę serwera, użyj indeksu części 4
SELECT PARSENAME('ServerName.DatabaseName.SchemaName.ObjectName',4) // returns `ServerName`
SELECT PARSENAME('[1012-1111].SchoolDatabase.school.Student',4) // returns `[1012-1111]`
PARSENAME zwróci null jest określony część nie występuje w podanym ciągu nazwy obiektu
INSTR
Zwraca indeks pierwszego wystąpienia podłańcucha (zero, jeśli nie znaleziono)
Składnia: INSTR (ciąg, podciąg)
SELECT INSTR('FooBarBar', 'Bar') -- return 4
SELECT INSTR('FooBarBar', 'Xar') -- return 0