Aracılığıyla paylaş


ALT DIZE (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsAnalytics Platform Sistemi (PDW)Microsoft FabricWarehouse'da SQL analiz uç noktası

SQL Server'da karakter, ikili, metin veya görüntü ifadesinin bir bölümünü döndürür.

Transact-SQL söz dizimi kuralları

Sözdizimi

SQL Server için söz dizimi.

SUBSTRING ( expression , start , length )

Microsoft Fabric'te Azure SQL Veritabanı, Azure SQL Yönetilen Örneği, Azure Synapse Analytics, Analiz Platformu Sistemi (PDW) ve Ambar ve SQL analiz uç noktası için söz dizimi.

SUBSTRING ( expression , start [ , length ] )

Tartışmalar

ifade

Karakter, ikili, metin, ntext veya görüntüifadesi.

başlangıç

Döndürülen karakterlerin nereden başlayacağını belirten bir tamsayı veya bigint ifadesi. (Numaralandırma 1 tabanlıdır, yani ifadedeki ilk karakter 1'dir). Başlangıç 1'den küçükse, döndürülen ifade ifadede belirtilen ilk karakterde başlar. Bu durumda, döndürülen karakter sayısı başlangıç + uzunluğu toplamının en büyük değeridir - 1 veya 0. Başlangıç değeri değer ifadesindeki karakter sayısından büyükse, sıfır uzunluklu bir ifade döndürülür.

uzunluk

İfadenin kaç karakterinin döndürüldüğünü belirten pozitif bir tamsayı veya bigintifadesi . Uzunluk negatifse bir hata oluşturulur ve deyimi sonlandırılır. Başlangıç ve uzunluk toplamı ifadedeki karakter sayısından büyükse, başlangıçtan itibaren tüm değer ifadesi döndürülür. Uzunluk belirtilmezse, başlangıç konumundan ifadenin sonuna kadar olan tüm karakterler döndürülür.

Alt dizeyi Azure SQL Veritabanı, Azure SQL Yönetilen Örneği, Azure Synapse Analytics, Analiz Platformu Sistemi (PDW) ve Microsoft Fabric'teki Ambar ve SQL analiz uç noktasında isteğe bağlı uzunluk bağımsız değişkeniyle kullanabilirsiniz. AncakNULL için kullanırsanız döndürür SUBSTRINGNULL. E.'yi gözden geçirin. Bir örnek için isteğe bağlı uzunluk bağımsız değişkeniyle ALTSTRING kullanın.

Dönüş türleri

İfade desteklenen karakter veri türlerinden biriyse karakter verilerini döndürür. İfade desteklenen ikili veri türlerinden biriyse ikili verileri döndürür. Döndürülen dize, tabloda gösterilen özel durumlarla belirtilen ifadeyle aynı türdedir.

Belirtilen ifade Dönüş türü
Char / varchar / Metin varchar
nchar / (İngilizce)Nvarchar / Belediyesintext nvarchar
ikili / varbinary / resim varbinary

Açıklamalar

Başlangıç ve uzunluk değerleri ntext, char veya varchar veri türleri için karakter sayısı ve metin, görüntü, ikili veya varbinary veri türleri için bayt cinsinden belirtilmelidir.

Başlangıç veya uzunluk 2.147.483.647'den büyük bir değer içerdiğinde ifadevarchar(max) veya varbinary(max) olmalıdır.

Ek karakterler (vekil çiftler)

Tamamlayıcı karakter (SC) harmanlamaları kullandığınızda, hem başlangıç hem de uzunlukifadedeki her vekil çifti tek bir karakter olarak sayar. Daha fazla bilgi için bkz. Harmanlama ve Unicode desteği.

Örnekler

A. Karakter dizesi ile ALT DIZE kullanma

Aşağıdaki örnekte, bir karakter dizesinin yalnızca bir bölümünün nasıl döndürüleceği gösterilmektedir. Tablodan sys.databases , bu sorgu ilk sütundaki sistem veritabanı adlarını, ikinci sütundaki veritabanının ilk harfini ve son sütundaki üçüncü ve dördüncü karakterleri döndürür.

SELECT name,
       SUBSTRING(name, 1, 1) AS Initial,
       SUBSTRING(name, 3, 2) AS ThirdAndFourthCharacters
FROM sys.databases
WHERE database_id < 5;

Sonuç kümesi aşağıdadır.

isim İlk Üçüncü ve Dördüncü Karakterler
master m st
tempdb t mp
model m de
msdb m db

Dize sabitinin abcdefikinci, üçüncü ve dördüncü karakterlerini görüntülemek için aşağıdaki sorguyu kullanın.

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

Sonuç kümesi aşağıdadır.

x
----------
bcd

B. Metin, ntext ve görüntü verileriyle SUBSTRING kullanma

Uyarı

Aşağıdaki örnekleri çalıştırmak için pubs veritabanını yüklemeniz gerekir.

Aşağıdaki örnekte, veritabanı tablosundaki bir metin ve görüntü veri sütununun pub_info her birinden ilk 10 karakterin nasıl döndürüleceği pubs gösterilmektedir. metin verileri varchar olarak, görüntü verileri ise varbinary olarak döndürülür.

USE pubs;
GO

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 aşağıdadır.

 pub_id logo    pr_info
------ ---------------------- ----------
1756   0x474946383961E3002500 This is sa

Aşağıdaki örnekte, SUBSTRING hem de ntext verileri üzerindeki etkisi gösterilmektedir. İlk olarak, bu örnek veritabanında adlı pubsyeni bir tablo npub_info oluşturur. İkinci olarak örnek, tabloda sütunun pr_info ilk 80 karakterinden npub_info sütun oluşturur pub_info.pr_info ve ilk karakter olarak bir ü ekler. Son olarak, bir INNER JOIN tüm yayımcı tanımlama numaralarını ve SUBSTRINGhem metin hem de ntext yayımcı bilgileri sütunlarını alır.

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 FOREIGN KEY
        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 AS pr
     INNER JOIN npub_info AS npr
         ON pr.pub_id = npr.pub_id
ORDER BY pr.pub_id ASC;

Örnekler: Azure Synapse Analytics ve Analytics Platform Sistemi (PDW)

C. Karakter dizesi ile ALT DIZE kullanma

Aşağıdaki örnekte, bir karakter dizesinin yalnızca bir bölümünün nasıl döndürüleceği gösterilmektedir. Tablodan dbo.DimEmployee , bu sorgu bir sütunda aile adını döndürür ve ikinci sütunda yalnızca ilk baş harfleri bulunur.

-- Uses AdventureWorks
SELECT LastName,
       SUBSTRING(FirstName, 1, 1) AS Initial
FROM dbo.DimEmployee
WHERE LastName LIKE 'Bar%'
ORDER BY LastName;

Sonuç kümesi aşağıdadır.

LastName             Initial
-------------------- -------
Barbariol            A
Barber               D
Barreto de Mattos    P

Aşağıdaki örnekte, dize sabitinin abcdefikinci, üçüncü ve dördüncü karakterlerinin nasıl döndürüleceği gösterilmektedir.

USE ssawPDW;

SELECT TOP 1 SUBSTRING('abcdef', 2, 3) AS x
FROM dbo.DimCustomer;

Sonuç kümesi aşağıdadır.

x
-----
bcd

D. SubSTRING'i uzunluk bağımsız değişkeniyle NULL kullanma

SELECT SUBSTRING('123abc', 4, NULL) AS [NULL length];

Sonuç kümesi aşağıdadır.

NULL length
-----------
NULL

E. İsteğe bağlı uzunluk bağımsız değişkeniyle ALT DIZE kullanma

Şunlar için geçerlidir: Microsoft Fabric'te Azure SQL Veritabanı, Azure SQL Yönetilen Örneği, Azure Synapse Analytics, Analiz Platformu Sistemi (PDW) ve Ambar ve SQL analiz uç noktası

Aşağıdaki örnekte, belirli bir başlangıç konumundan karakter dizesinin yalnızca bir kısmının nasıl döndürüleceği gösterilmektedir. Uzunluk bağımsız değişkeni sağlanmadığından, dizedeki kalan karakterleri döndürmek için uzunluk varsayılandır.

SELECT SUBSTRING('123abc', 4) AS y;

Sonuç kümesi aşağıdadır.

y
-----
abc

F. AdventureWorks2022 envanterindeki yedek parçaları bulmak için uzunluk bağımsız değişkeni olmadan SUBSTRING kullanma

USE AdventureWorks2022;
GO

SELECT [ProductDescriptionID],
       [Description],
       SUBSTRING([Description], LEN('Replacement') + 1) AS [Replacement-Part]
FROM [Production].[ProductDescription]
WHERE [Description] LIKE 'Replacement%';

Sonuç kümesi aşağıdadır.

ProductDescriptionID (ÜrünAçıklama Kimliği) Açıklama Replacement-Part
686 Giriş seviyesi binici için yedek dağ tekerleği. giriş seviyesi binici için dağ tekerleği.
687 Sıradan ve ciddi binici için yedek dağ tekerleği. sıradan ve ciddi binici için dağ tekerleği.
689 Giriş seviyesi bisikletçi için yedek yol ön tekerleği. giriş seviyesi bisikletçi için yol ön tekerleği.
867 Giriş seviyesi binici için yedek arka dağ tekerleği. giriş seviyesi sürücü için arka dağ tekerleği.
868 Normal ve ciddi binici için yedek arka dağ tekerleği. normal ve ciddi binici için arka dağ tekerleği.
870 Giriş seviyesi bisikletçi için yedek arka tekerlek. giriş seviyesi bisikletçi için arka tekerlek.
1981 Giriş seviyesi binici için yedek dağ tekerleği. giriş seviyesi binici için dağ tekerleği.
1987 Sıradan ve ciddi binici için yedek dağ tekerleği. sıradan ve ciddi binici için dağ tekerleği.
1999 Giriş seviyesi bisikletçi için yedek yol arka tekerleği. giriş seviyesi bisikletçi için yol arka tekerleği.