Udostępnij za pośrednictwem


SUBSTRING (Transact-SQL)

Zwraca część znaku, binarnym, tekst lub obraz wyrażenie.Aby uzyskać więcej informacji na temat prawidłowego SQL Server typy danych, które mogą być używane z tej funkcja, zobacz Typy danych (Transact-SQL).

Ikona łącza do tematuJęzyka Transact-SQL składni konwencje

Składnia

SUBSTRING ( value_expression , start_expression , length_expression )

Argumenty

  • value_expression
    Is a character, binary, text, ntext, or imagewyrażenie.

  • start_expression
    Jest liczbą całkowitą lub bigint wyrażenie określające, gdzie rozpocząć zwracane znaki.Jeśli start_expression jest mniejsza niż 1 zwracanych wyrażenie rozpocznie się od pierwszego znaku, określona w value_expression.W tym przypadekliczbę znaków, które są zwracane jest największą wartość sumy z start_expression i length_expression lub 0.Jeśli start_expression jest większa niż liczba znaków w wartości wyrażenieo zerowej długości wyrażenie jest zwracana.

  • length_expression
    Jest dodatnią liczbą całkowitą lub bigint wyrażenie Określa ile znaków z value_expression zostaną zwrócone.Jeśli length_expression jest ujemna, zostanie wygenerowany błąd i zakończone instrukcja .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 znak danych, jeśli expression jest jednym z typów danych obsługiwanych znaków.Zwraca dane binarne, jeśli expression jest jednym z obsługiwanych binary typów danych.Zwrócony ciąg jest tego samego typu co określone wyrażenie z wyjątkami wymienionych w tabela.

Określone wyrażenie

Zwracany typ

char/varchar/text

varchar

nchar/nvarchar/ntext

nvarchar

binary/varbinary/image

varbinary

Uwagi

Wartości dla start_expression i length_expression musi być określona liczba znaków dla ntext, char, lub varchar typów danych i bajtów dla text, image, binary, lub varbinary typów danych.

value_expression Musi być varchar(max) lub varbinary(max) po start_expression lub length_expression zawiera wartość większą niż 2147483647.

Ostrzeżenie

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.Przy użyciu znaków ciągPODCIĄGU

Poniższy przykład pokazuje jak zwrócić tylko część ciągznaków.Z Contact tabelata kwerenda zwraca nazwiska w jednej kolumna z wstępnego pierwszego w drugiej kolumna.

USE AdventureWorks2008R2;
GO
SELECT LastName, SUBSTRING(FirstName, 1, 1) AS Initial
FROM Person.Person
WHERE LastName like 'Barl%'
ORDER BY LastName;

Oto zestaw wyników.

LastName Initial

--------------------------------- -------

Barley R

Barlow B

(2 row(s) affected)

Poniżej przedstawiono sposób wyświetlania drugiego, trzeciego i czwartego znaków ciąg stała abcdef.

SELECT x = SUBSTRING('abcdef', 2, 3);

Oto zestaw wyników.

x

----------

bcd

(1 row(s) affected)

B.Tekst, ntext i image danych przy użyciu PODCIĄGU

Ostrzeżenie

Aby uruchomić następujące przykłady, należy zainstalować pubs bazy danych.Aby uzyskać informacje dotyczące sposobu instalowania pubs bazy danych, zobacz Pobieranie Northwind i pubs przykładowe bazy danych.

Poniższy przykład ilustruje sposób zwraca pierwsze 10 znaków z każdego z text i image kolumna danych w pub_info tabela pubs bazy danych.textdane są zwracane jako varchar, i image dane są zwracane jako 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';

Oto zestaw wyników.

pub_id logo pr_info

------ ---------------------- ----------

1756 0x474946383961E3002500 This is sa

(1 row(s) affected)

Poniższy przykład pokazuje wpływ PODCIĄGU w obu text i ntext danych.Po pierwsze, w tym przykładzie powoduje utworzenie nowej tabela w pubs bazy danych o nazwie npub_info.Po drugie, w przykładzie tworzone 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 programu publisher i SUBSTRING zarówno text i ntext kolumn informacji w programie publisher.

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;