Alt DIZE (Transact-sql)

Döner karakter, ikili, metin veya resim ifadede bir parçası SQL Server 2012.

Konu bağlantısı simgesi Transact-SQL Sözdizim Kuralları

Sözdizimi

SUBSTRING ( expression ,start , length )

Bağımsız değişkenler

  • expression
    Is a character, binary, text, ntext, or image expression.

  • start
    Bir tamsayı ya da bigintburada döndürülen karakterler başlatmak belirten ifade. Eğer startaz 1, döndürülen ifade belirtilen birinci karakterde başlar expression. Bu, döndürülen karakter sayısı en büyük değeri toplamının iki durumda start+ length- 1 veya 0. Eğer startsayıdan büyük karakter değeri ifade sıfır uzunluklu ifade döndürdü.

  • length
    Pozitif bir tamsayı veya bigintkaç karakterini belirtir ifade expressioniade edilecektir. Eğer lengthise negatif, bir hata oluşturulur ve deyim sonlandırıldı. Eğer toplamı startve lengthkarakter sayısından büyükse expression, Bütün değer ifade başında startdöndürdü.

Dönüş Türleri

Döner karakter verileri, expressiondesteklenen karakter veri türlerinden biri. İkili veriyi döndürür expressionbiri desteklenen binaryveri türlerini. Döndürülen dize olarak belirtilen ifade tabloda gösterilen istisnalar aynı türüdür.

Belirtilen ifade

Dönüş türü

char/varchar/text

varchar

nchar/nvarchar/ntext

nvarchar

binary/varbinary/image

varbinary

Açıklamalar

Değerleri startve lengthiçin karakter sayısı belirtilmelidir ntext, char, ya varcharveri türleri ve bayt text, image, binary, ya varbinaryveri türlerini.

expressionOlması varchar(max)ya varbinary(max) zaman startya length2147483647 büyük bir değer içeren.

İkincil Karakterler (Yedek Çiftler)

sc alfabe, kullanırken de startve lengthher yedek çifti sayılır expressiontek bir karakter olarak. Daha fazla bilgi için, bkz. Harmanlama ve Unicode desteği.

Örnekler

A.Alt DIZE karakter dizesi ile kullanma

Aşağıdaki örnek, karakter dizesi yalnızca bir bölümünü dönmek gösterilmiştir. Dan Persontablosu, bu sorgu yalnızca ilk ilk ikinci sütunda bir sütununu Soyadı döndürür.

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

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

Sonuç kümesi buradadır.

LastName      Initial

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

Barley        R

Barlow        B

(2 row(s) affected)

İşte nasıl görüntüleneceğini ikinci, üçüncü ve dördüncü karakter dize sabiti, abcdef.

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

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

Sonuç kümesi buradadır.

x

----------

bcd

(1 row(s) affected)

B.Alt DIZE metin, ntext ve resim verileri ile kullanma

[!NOT]

Aşağıdaki örneklerde çalıştırmak için önce yüklemeniz gerekir pub veritabanı.

Aşağıdaki örnekte ilk 10 karakter her birinden dönmek gösterilmiştir bir textve imageveri sütununda pub_infotablo pubsveritabanı. textveri olarak döndürülen varchar, ve imageolarak döndürülen veriler 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';

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';

Sonuç kümesi buradadır.

pub_id logo pr_info

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

1756 0x474946383961E3002500 This is sa

(1 row(s) affected)

Aşağıdaki örnek dize etkisini gösterir hem de textve ntextveri. Önce yeni tablo bu örnek oluşturur pubsveritabanı adı npub_info. İkinci olarak, örnek oluşturur pr_infosütununda npub_infoilk 80 karakter tablosundan pub_info.pr_infosütun ve ekler bir üilk karakteri olarak. Son olarak, bir INNER JOINtüm yayımcı kimlik numarası alır ve SUBSTRINGhem textve ntextyayımcı bilgileri sütunlar.

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')
,('0877', N'üThis is sample text data for Binnet & Hardley, publisher 0877 in the pubs databa')
,('1389', N'üThis is sample text data for Algodata Infosystems, publisher 1389 in the pubs da')
,('9952', N'üThis is sample text data for Scootney Books, publisher 9952 in the pubs database')
,('1622', N'üThis is sample text data for Five Lakes Publishing, publisher 1622 in the pubs d')
,('1756', N'üThis is sample text data for Ramona Publishers, publisher 1756 in the pubs datab')
,('9901', N'üThis is sample text data for GGG&G, publisher 9901 in the pubs database. GGG&G i')
,('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;

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')
,('0877', N'üThis is sample text data for Binnet & Hardley, publisher 0877 in the pubs databa')
,('1389', N'üThis is sample text data for Algodata Infosystems, publisher 1389 in the pubs da')
,('9952', N'üThis is sample text data for Scootney Books, publisher 9952 in the pubs database')
,('1622', N'üThis is sample text data for Five Lakes Publishing, publisher 1622 in the pubs d')
,('1756', N'üThis is sample text data for Ramona Publishers, publisher 1756 in the pubs datab')
,('9901', N'üThis is sample text data for GGG&G, publisher 9901 in the pubs database. GGG&G i')
,('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;

Ayrıca bkz.

Başvuru

Dize işlevler (Transact-sql)