SQL Server'da Bir Dizeyi Sınırlandırılmış Bir Karakterle Bölme?



Sorunları Ortadan Kaldırmak Için Enstrümanımızı Deneyin

Bu makalede, sınırlandırılmış dize değerini bölmenin birkaç yolunu tartışacağız. Dahil olmak üzere birden fazla yöntem kullanılarak elde edilebilir.



  • Dizeyi bölmek için STRING_SPLIT işlevinin kullanılması
  • Dizeyi bölmek için kullanıcı tanımlı tablo değerli bir işlev oluşturun,
  • Dize değerini bölmek ve sınırlandırılmış bir dizeyi XML'e dönüştürmek için XQuery kullanın

Her şeyden önce, her üç yöntemde de kullanılacak bir tablo oluşturmalı ve içine veri eklemeliyiz. Tablo, alan kimliğine sahip tek bir satır ve içinde sınırlayıcı karakterler bulunan dize içermelidir. Aşağıdaki kodu kullanarak 'öğrenci' adlı bir tablo oluşturun.



CREATE TABLE öğrencisi (ID INT IDENTITY (1, 1), student_name VARCHAR (MAX))

Aşağıdaki kodu çalıştırarak, virgülle ayrılmış öğrenci adlarını tek bir satıra girin.



INSERT INTO öğrenci (öğrenci_adı) DEĞERLERİ ('Monroy, Montanez, Marolahakis, Negley, Albright, Garofolo, Pereira, Johnson, Wagner, Conrad')

Tablo oluşturma ve veri ekleme

Verilerin tabloya eklenip eklenmediğini aşağıdaki kodu kullanarak doğrulayın.

öğrenciden * seçin

Verilerin 'öğrenci' tablosuna eklenip eklenmediğini doğrulayın



Yöntem 1: Dizeyi bölmek için STRING_SPLIT işlevini kullanın

SQL Server 2016'da, 'STRING_SPLIT' Uyumluluk düzeyi 130 ve üzeri ile kullanılabilen işlev tanıtıldı. 2016 SQL Server sürümünü veya daha üstünü kullanıyorsanız bu yerleşik işlevi kullanabilirsiniz.

Ayrıca 'STRING_SPLIT' sınırlandırılmış alt dizelere sahip bir dize ve sınırlayıcı veya ayırıcı olarak kullanmak için bir karakter girilir. İşlev, satırları alt dizeleri içeren tek sütunlu bir tablo oluşturur. Çıktı sütununun adı ' Değer ' . Bu işlev iki parametre alır. İlk parametre bir dizedir ve ikincisi, dizeyi bölmemiz gereken sınırlayıcı karakter veya ayırıcıdır. Çıktı, alt dizelerin bulunduğu tek sütunlu bir tablo içerir. Bu çıktı sütununun adı 'Değer' aşağıdaki şekilde görebileceğimiz gibi. Dahası, 'STRING SPLIT' table_valued işlevi, giriş dizesi NULL ise boş bir tablo döndürür.

Veritabanının uyumluluk seviyesi:

Her biriveri tabanıdır-dirbağlıile-euyumlulukseviyesi.Oetkinleştirirveritabanıdavranış-eolmakuyumluth iledır-dirbelirliSQLSunucuversiyonokoşarüzerinde.

Şimdi virgülle ayrılmış dizgeyi bölmek için 'string_split' işlevini çağıracağız. Ancak uyumluluk seviyesi 130'dan azdı, bu nedenle aşağıdaki hata yükseltildi. 'Geçersiz nesne adı' SPLIT_STRING '

Veritabanının uyumluluk seviyesi 130 'Geçersiz nesne adı bölme_dizesi' nin altındaysa hata oluşur

Bu nedenle veritabanı uyumluluk düzeyini 130 veya üstüne ayarlamamız gerekiyor. Bu nedenle, veritabanının uyumluluk seviyesini ayarlamak için bu adımı takip edeceğiz.

  • Öncelikle aşağıdaki kodu kullanarak veritabanını “single_user_access_mode” olarak ayarlayın.
ALTER VERİTABANI SETİ SINGLE_USER
  • İkinci olarak, aşağıdaki kodu kullanarak veritabanının uyumluluk düzeyini değiştirin.
ALTER VERİTABANI SETİ COMPATIBILITY_LEVEL = 130
  • Aşağıdaki kodu kullanarak veritabanını çoklu kullanıcı erişim moduna geri getirin.
ALTER VERİTABANI SETİ MULTI_USER
[Ana] KULLANIM ALTER VERİTABANINA GİT [köprü_ merkezlilik] SINGLE_USER ALTER VERİTABANI AYARLA [köprü_ merkezlilik] UYUMLULUK AYARLA_LEVEL = 130 ALTER VERİTABANI [köprü_ merkezlilik] AYARLA MULTI_USER GİT

Çıktı şu şekilde olacaktır:

Uyumluluk düzeyini 130 olarak değiştirin

Şimdi gerekli sonucu almak için bu kodu çalıştırın.

DECLARE @string_value VARCHAR (MAX); SET @ string_value = 'Monroy, Montanez, Marolahakis, Negley, Albright, Garofolo, Pereira, Johnson, Wagner, Conrad' STRING_SPLIT (@string_value,