SUBSTRING (Transact-SQL)
Zwraca część wyrażenia znakowego, binarnego, tekstowego lub obrazowego.Aby uzyskać więcej informacji dotyczących poprawnych typów danych programu SQL Server, które mogą być używane z tą funkcją, zobacz Data Types (Transact-SQL).
SUBSTRING ( value_expression ,start_expression , length_expression )
Argumenty
value_expression
Is a character, binary, text, ntext, or imageexpression.start_expression
Jest liczbą całkowitą lub bigint wyrażenie określające, w której uruchomiony zwracane znaki. Jeśli start_expression jest mniejsza niż 1, zwrócony wyrażenie będzie rozpoczynać się od pierwszego znaku, który jest podana w value_expression. W takim przypadek liczbę znaków, które są zwracane jest największą wartość w jednej sumę start_expression i length_expression lub 0. Jeśli start_expression jest większa niż liczba znaków w wyrażeniu wartość zwracana jest wyrażenie o zerowej długości.length_expression
Jest dodatnią liczbą całkowitą lub bigint wyrażenie określające liczbę znaków z value_expression zostaną zwrócone. Jeśli length_expression jest ujemna, zostanie wygenerowany błąd, i w instrukcja jest zakończona. Jeśli suma start_expression i length_expression jest większa niż liczba znaków w value_expression, początek wyrażenie wartości całkowitej w start_expression jest zwracany.
Zwracane typy
Zwraca dane znakowe, jeśli expression jest jednym z obsługiwanych typów danych znakowych.Zwraca dane binarne, jeśli expression jest jednym z obsługiwanych typów danych binary.Zwracany ciąg jest jest tego samego typu, co podane wyrażenie, oprócz wyjątków wymienionych w tabeli.
Dane są przechowywane w bazie danych i przetwarzania, w porównaniu, posortowane i indeksowania na serwerze jako według czasu UTC. |
Zwracany typ |
---|---|
char/varchar/text |
varchar |
nchar/nvarchar/ntext |
nvarchar |
binary/varbinary/image |
varbinary |
Remarks
Wartości dla start_expression i length_expression należy określić liczbę znaków ntext, char, lub varchar typy danych i bajtów text, image, binary, lub varbinary typy danych.
The value_expression must be varchar(max) or varbinary(max) when the start_expression or length_expression contains a value larger than 2147483647.
Uwaga
Poziomy zgodności może mieć wpływ na wartości zwracanych.Aby uzyskać więcej informacji na temat poziomów zgodności zobacz sp_dbcmptlevel (języka Transact-SQL).
Przykłady
A.Użycie funkcji SUBSTRING dla ciągu znaków.
W poniższym przykładzie pokazano, jak uzyskać część ciągu znaków.Ta kwerenda dla tabeli Contact zwraca w pierwszej kolumnie nazwisko, a w drugiej tylko pierwszy inicjał.
USE AdventureWorks;
GO
SELECT LastName, SUBSTRING(FirstName, 1, 1) AS Initial
FROM Person.Contact
WHERE LastName like 'Barl%'
ORDER BY LastName;
Here is the result set.
LastName Initial
--------------------------------- -------
Zwraca bieżący okres aktualizacji.
Zwraca bieżący okres aktualizacji, czyli liczba minut między aktualizacjami dublowanie tabela stanu bazy danych.
(dotyczy wiersze 2)
Poniżej przedstawiono sposób wyświetlania drugim, trzecim i czwartym znaków stała znakowa abcdef.
SELECT x = SUBSTRING('abcdef', 2, 3);
Here is the result set.
x
----------
zestaw CONTEXT_INFO (języka Transact-SQL)
(dotyczy wiersze 1)
B.Kojarzy do 128 bajtów danych binarnych z bieżącej sesja lub połączenia.
Uwaga
Aby uruchomić w poniższych przykładach, należy zainstalować Pubs bazy danych.Aby uzyskać informacje dotyczące sposobu instalowania Pubs bazy danych, zobacz temat Pobieranie Northwind i przykładowe bazy danych pubs.
The following example shows how to return the first 10 characters from each of a text and image data column in the pub_info table of the pubs database.text data is returned as varchar, and image data is returned as varbinary.
USE pubs;
SELECT pub_id, SUBSTRING(logo, 1, 10) AS logo,
SUBSTRING(pr_info, 1, 10) AS pr_info
FROM pub_info
WHERE pub_id = '1756';
Here is the result set.
Za pomocą funkcja CONTEXT_INFO jest preferowanym sposobem pobierania informacji kontekstu dla bieżącej sesja.
------ ---------------------- ----------
1756 0x474946383961E3002500 To jest sa
(dotyczy wiersze 1)
Poniższy przykład przedstawia wynik SUBSTRING w obu text i ntext dane. Po pierwsze, w tym przykładzie zostanie utworzona nowa tabela w pubs bazy danych o nazwie npub_info. Po drugie, w przykładzie zostanie utworzony pr_info kolumna w npub_info Tabela z najpierw 80 znaków pub_info.pr_info kolumna, a następnie dodaje ü jako pierwszy znak. Wreszcie INNER JOIN pobiera wszystkie numery identyfikacyjne Wydawca i SUBSTRING zarówno text i ntext kolumny informacji Wydawca.
IF EXISTS (SELECT table_name FROM INFORMATION_SCHEMA.TABLES
WHERE table_name = 'npub_info')
DROP TABLE npub_info;
GO
-- Create npub_info table in pubs database. Borrowed from instpubs.sql.
USE pubs;
GO
CREATE TABLE npub_info
(
pub_id char(4) NOT NULL
REFERENCES publishers(pub_id)
CONSTRAINT UPKCL_npubinfo PRIMARY KEY CLUSTERED,
pr_info ntext NULL
);
GO
-- Fill the pr_info column in npub_info with international data.
RAISERROR('Now at the inserts to pub_info...',0,1);
GO
INSERT npub_info VALUES('0736', N'üThis is sample text data for New Moon Books, publisher 0736 in the pubs database');
INSERT npub_info values('0877', N'üThis is sample text data for Binnet & Hardley, publisher 0877 in the pubs databa');
INSERT npub_info values('1389', N'üThis is sample text data for Algodata Infosystems, publisher 1389 in the pubs da');
INSERT npub_info values('9952', N'üThis is sample text data for Scootney Books, publisher 9952 in the pubs database');
INSERT npub_info values('1622', N'üThis is sample text data for Five Lakes Publishing, publisher 1622 in the pubs d');
INSERT npub_info values('1756', N'üThis is sample text data for Ramona Publishers, publisher 1756 in the pubs datab');
INSERT npub_info values('9901', N'üThis is sample text data for GGG&G, publisher 9901 in the pubs database. GGG&G i');
INSERT npub_info values('9999', N'üThis is sample text data for Lucerne Publishing, publisher 9999 in the pubs data');
GO
-- Join between npub_info and pub_info on pub_id.
SELECT pr.pub_id, SUBSTRING(pr.pr_info, 1, 35) AS pr_info,
SUBSTRING(npr.pr_info, 1, 35) AS npr_info
FROM pub_info pr INNER JOIN npub_info npr
ON pr.pub_id = npr.pub_id
ORDER BY pr.pub_id ASC;