internet pencereler Android

Sql dize işlevleri oluşumu bulur. SQL dize işlevleri

SQL sorgu dilini incelemeye devam ediyoruz ve bugün hakkında konuşacağız. SQL dize işlevleri... Aşağıdakiler gibi temel ve yaygın olarak kullanılan dize işlevlerini ele alacağız: ALT, LTRIM, DEĞİŞTİR ve diğerleri, elbette her şeyi örneklerle ele alacağız.

isim SEÇ || tablodan FIO olarak soyadı

Veya boşlukla ayırmak için girin

isim SEÇ || "" || tablodan FIO olarak soyadı

onlar. iki dikey çubuk iki sütunu tek bir sütunda birleştirir ve onları bir boşlukla ayırmak için aralarına bir boşluk koyarım ( tire veya iki nokta üst üste gibi herhangi bir karakteri kullanabilirsiniz) kesme işareti içinde ve ayrıca iki dikey çubukla birleştirilmiştir ( Transact-SQL, iki dikey çubuk yerine + kullanır).

INITCAP işlevi

Sonra çok kullanışlı bir işlev geliyor, INITCAP- bu, her kelimenin bir büyük harfle başlayıp küçük harflerle devam ettiği bir dizedeki değeri döndürür. Bu, herhangi bir sütundaki doldurma kurallarına uymazsanız ve her şeyi güzel bir biçimde görüntülemek için gereklidir, bu işlevi kullanabilirsiniz, örneğin tablonuzda ad sütunundaki kayıtlar aşağıdaki form: IVAN ivanov veya petr Petrov, bu işlevi kullanıyorsunuz.

Tablodan INITCAP (isim) FIO OLARAK SEÇİN

Ve bu şekilde alacaksınız.

ÜST işlev

Benzer bir işlev, yalnızca tüm büyük harfli karakterleri döndürür, bu ÜST.

Tablodan ÜST (isim) FIO OLARAK SEÇİN

  • isim - sütunun adı;
  • 20 - karakter sayısı ( alan uzunluğu);
  • '-', gerekli sayıda karaktere doldurulacak bir karakterdir.

RPAD işlevi

Hemen ters fonksiyonu ele alalım. RPAD- eylem ve sözdizimi LPAD ile aynıdır, yalnızca sağdaki karakterler doldurulur ( soldaki LPAD'de).

Tablodan ad OLARAK RPAD (ad, 20, "-") SEÇİN

İvan —————-
Sergey-----

LTRIM işlevi

Next ayrıca bazı durumlarda yararlı bir işlevdir, LTRIM- bu işlev, belirttiğiniz en soldaki karakterleri kaldırır. Örneğin, veritabanınızda şehrin “Moskova” olarak belirtildiği bir “şehir” sütununuz var ve ayrıca sadece “Moskova” olarak belirtilen şehirler de var. Ancak raporu yalnızca "g" olmadan "Moskova" biçiminde görüntülemeniz gerekir. Siz sadece bir çeşit "g" deseni belirleyin. ve en soldaki karakterler "g" ile başlıyorsa, bu karakterler görüntülenmeyecektir.

Tablodan gorod OLARAK LTRIM (şehir, "şehir") SEÇİN

Bu fonksiyon soldaki karakterleri tarar, dizgenin başındaki kalıpta karakter yoksa hücrenin orijinal değerini döndürür, varsa siler.

RTRIM işlevi

Ayrıca hemen ters fonksiyona bir göz atalım. RTRIM- LTRIM ile aynı, sağda sadece karakterler aranır.

Not! Transact-SQL'de, RTRIM ve LTRIM işlevleri sırasıyla sağdan ve soldan boşlukları kaldırır.

DEĞİŞTİR işlevi

Şimdi böyle ilginç bir fonksiyona bakalım. YER DEĞİŞTİRMEK- tüm karakter eşleşmelerinin belirttiğiniz karakterlerinizle değiştirildiği bir dize döndürür. Örneğin, ne kullanılabileceği için, veritabanınızda bazı ayırıcı sembollerin bulunduğu sütunlarınız var, örneğin "/". Örneğin, Ivan / Ivanov ve Ivan-Ivanov'u görüntülemek istiyorsanız, ardından yazın

Tablodan DEĞİŞTİR (ad, "/", "-") SEÇİN

ve sembollerin bir yedeğine sahip olacaksınız.

Bu işlev, örneğin "-" belirtirseniz, yani yalnızca tam bir karakter eşleşmesinin yerini alır. yalnızca üç tire arayacak ve sonraki işlevden farklı olarak her bir tirenin yerini almayacaktır.

ÇEVİR işlevi

ÇEVİRMEK- bir dizedeki tüm karakterleri belirttiğiniz karakterlerle değiştiren bir dize işlevi. İşlevin adına dayanarak, bunun tam bir satır beslemesi olduğunu tahmin edebilirsiniz. Bu işlev ile DEĞİŞTİR arasındaki fark, belirttiğiniz her karakterin yerini almasıdır, yani. Üç karakteriniz var, diyelim abc ve TRANSLATE yardımıyla onu abc ile değiştirebilirsiniz, böylece a = a, b = b, c = c olur ve bu prensibe göre tüm karakter eşleşmeleri değiştirilir. Ve DEĞİŞTİR ile değiştirdiyseniz, yalnızca arka arkaya yerleştirilmiş abc sembollerinin tam eşleşmesini arıyordunuz.

SUBSTR işlevi

SUBSTR- bu işlev yalnızca belirttiğiniz karakter aralığını döndürür. Başka bir deyişle, 10 karakterlik bir dize diyelim ve on karakterin tümüne ihtiyacınız yok, ancak sadece 3-8'e ihtiyacınız olduğunu varsayalım ( üçüncüden sekizinciye). Bu fonksiyon ile bunu kolayca yapabilirsiniz. Örneğin, veritabanında sabit uzunlukta (AA-BB-55-66-CC gibi) bir tanımlayıcınız var ve her karakter kombinasyonu bir anlam ifade ediyor. Ve bir anda size sadece 2 ve 3 karakter kombinasyonu göstermeniz söylendi, bunun için aşağıdaki formun bir sorgusunu yazıyorsunuz.

Tablodan SUBSTR (tanım, "4", "8") SEÇİN

onlar. 4 ile başlayan ve 8 ile biten tüm karakterleri yazdırıyoruz ve bu sorgudan sonra şunu alacaksınız:

LENGTH işlevi - dize uzunluğu

Bir sonraki işlev de kullanışlı olabilir, UZUNLUK- bu sadece bir satırdaki karakter sayısını sayar. Örneğin, bir sütundaki her hücrede kaç karakter olduğunu bulmanız gerekiyor, "ad" diyelim, bunun gibi bir tablo.

Tablodan UZUNLUK (isim) SEÇİN

bu istekten sonra bunu alacaksınız.

4
6
7

İşte karşınızdayız ve temel SQL string fonksiyonlarını inceledik. Gelecek makalelerde, SQL'i keşfetmeye devam edeceğiz.

Transact-SQL işlevleri toplu veya skaler olabilir. Bu tür işlevler bu makalede tartışılmaktadır.

Toplama işlevleri

Toplama işlevleri, bir grup sütun değeri üzerinde hesaplamalar yapar ve bu hesaplamalardan her zaman tek bir değer döndürür. Transact-SQL, birkaç yaygın toplama işlevini destekler:

ortalama

Bir sütundaki verilerin aritmetik ortalamasını hesaplar. Değerlendirilen değerler sayısal olmalıdır.

MIN ve MAX

Sütunda yer alan tüm veri değerlerinin maksimum ve minimum değerini belirleyin. Değerler sayısal, dize veya saat (tarih/saat) olabilir.

TOPLA

Bir sütundaki değerlerin toplamını hesaplar. Değerlendirilen değerler sayısal olmalıdır.

SAYMAK

Bir sütundaki boş olmayan değerlerin sayısını sayar. Sayım (*) işlevi, sütunlarda hesaplama yapmayan tek toplama işlevidir. Bu işlev, satır sayısını döndürür (tek tek sütunların boş değerler içerip içermediğine bakılmaksızın).

COUNT_BIG

Bir BÜYÜK veri değeri döndürmesi farkıyla, sayma işlevine benzer.

Bir SELECT deyiminde düzenli toplama işlevlerinin kullanımı gelecekteki bir makalede ele alınacaktır.

skaler fonksiyonlar

Skaler ifadelerin oluşturulmasında Transact-SQL skaler fonksiyonları kullanılır. (Bir skaler fonksiyon, tek bir değer veya değerler listesi üzerinde hesaplamalar gerçekleştirirken, bir toplama fonksiyonu, birden çok satırdan bir grup değer üzerinde hesaplamalar gerçekleştirir.) Skaler fonksiyonlar aşağıdaki gibi kategorize edilebilir:

    sayısal fonksiyonlar;

    tarih fonksiyonları;

    dizi işlevleri;

    sistem fonksiyonları;

    meta veri işlevleri.

Bu tür işlevler aşağıdaki bölümlerde tartışılmaktadır.

Sayısal işlevler

Transact-SQL sayısal işlevleri, sayısal değerleri değiştirmek için kullanılan matematiksel işlevlerdir. Sayısal işlevlerin bir listesi ve kısa açıklamaları aşağıdaki tabloda verilmiştir:

Transact-SQL Sayısal İşlevler
İşlev Sözdizimi Açıklama kullanım örneği
ABS ABS (n)

N sayısal ifadesinin mutlak değerini (yani negatif değerler pozitif olarak döndürülür) döndürür.

SELECT ABS (-5.320) - 5.320 döndürür ABS SEÇ (8.90) - 8.90 döndürür

ACOS, ASIN, ATAN, ATN2 ACOS (n), ASIN (n), ATAN (n), ATN2 (n, m)

n değerinin ters kosinüsünü, ters sinüsünü ve arktanjantını hesaplayan ters trigonometrik fonksiyonlar (ATN2 için n / m'nin arktanjantı hesaplanır). Orijinal değerler n, m ve sonuç FLOAT veri tipindedir.

COS, SIN, TAN, COT COS (n), SIN (n), TAN (n), COT (n)

n değerinin kosinüs, sinüs, tanjant ve kotanjantını hesaplayan trigonometrik fonksiyonlar. Sonuç, FLOAT veri tipindedir.

DERECE, RADYAN DERECE (n), RADYAN (n)

DERECE işlevi, radyanları dereceye, RADYAN'ları ise tam tersine dönüştürür.

DERECE SEÇ (PI () / 4) - 45 SELECT COS (RADIANS (60.0)) - 0,5 döndürür

TAVAN TAVAN (n)

Bir sayıyı daha büyük bir tamsayı değerine yuvarlar.

TAVAN SEÇ (-5.320) - -5 TAVAN SEÇ (8.90) - 9 döndürür

YUVARLAK YUVARLAK (n, p, [t])

n'yi en yakın p'ye yuvarlar. p pozitif bir sayı olduğunda, n'nin kesirli kısmı yuvarlanır ve negatif olduğunda tamsayı kısmı yuvarlanır. İsteğe bağlı t bağımsız değişkenini kullanırken, n sayısı yuvarlanmaz, kısaltılır (yani aşağı yuvarlanır).

ROUND SELECT (5.3208, 3) - 5.3210 SELECT ROUND (125.384, -1) - 130.000 SELECT ROUND (125.384, -1, 1) - 120.000 döndürür

ZEMİN KAT (n)

En küçük tamsayı değerine yuvarlar.

KAT SEÇ (5.88) - 5 döndürür

tecrübe Deneyim (n)

e n değerini hesaplar.

GÜNLÜK, LOG10 LOG (n), LOG10 (n)

LOG (n) - n'nin doğal logaritmasını (yani e tabanı) hesaplar, LOG10 (n) - n'nin ondalık (taban 10) logaritmasını hesaplar.

PI PI ()

π (3.1415) döndürür

GÜÇ GÜÇ (x, y)

x y değerini hesaplar.

RAND RANDEVU ()

0 ile 1 arasındaki değerler aralığında rasgele sayıda FLOAT türü döndürür.

ROWCOUNT_BIG ROWCOUNT_BIG ()

Sistem tarafından yürütülen son Transact-SQL deyimi tarafından işlenen tablo satırlarının sayısını döndürür. Dönüş değeri BIGINT türündedir.

İMZA İŞARET (n)

Sayı olarak n değerinin işaretini döndürür: pozitifse +1, negatifse -1.

KARE, KARE KARE (n), KARE (n)

KARE (n) - n'nin karekökünü hesaplar, KARE (n) - n bağımsız değişkeninin karesini döndürür.

Tarih fonksiyonları

Tarih işlevleri, bir ifadenin tarih veya saatinin karşılık gelen kısımlarını değerlendirir veya bir zaman aralığı değeri döndürür. Transact-SQL tarafından desteklenen tarih işlevleri ve bunların kısa açıklamaları aşağıdaki tabloda gösterilmektedir:

Transact-SQL Tarih İşlevleri
İşlev Sözdizimi Açıklama kullanım örneği
GETDATE TARİH AL ()

Geçerli sistem tarihini ve saatini döndürür.

GETTARİH SEÇ ()

DATEPART DATEPART (öğe, tarih)

item parametresinde belirtilen tarih bölümünü bir tamsayı olarak döndürür.

1 döndürür (Ocak) DATEPART SEÇ (ay, "01.01.2012") - 4 döndürür (Çarşamba) DATEPART SEÇ (hafta içi, "02.01.2012")

DATENAME DATENAME (öğe, tarih)

item parametresinde belirtilen tarih bölümünü karakter dizgisi olarak döndürür.

Ocak SEÇ TARİH ADI (ay, "01/2012") - Çarşamba SEÇ TARİH ADI (hafta içi, "01/02/2012") döndürür

DATEDIFF DATEDIFF (madde, dat1, dat2)

dat1 ve dat2 tarihlerinin iki bölümü arasındaki farkı hesaplar ve öğe bağımsız değişkeninde belirtilen birimlerde bir tamsayı sonucu döndürür.

19 döndürür (tarihler arasında 19 yıl) DATEDIFF SEÇ (yıl, "01/01/1990", "01/01/2010") - 7305 döndürür (tarihler arasında 7305 gün aralığı) DATEDIFF SEÇ (gün, "01/01/ 1990", "01/01 .2010 ")

DATEADD DATEADD (öğe, n, tarih)

Öğe bağımsız değişkeninde belirtilen n'inci birim sayısını belirtilen tarihe ekler. (n değeri negatif de olabilir.)

Geçerli tarihe 3 gün ekle DATEADD SEÇ (gün, 3, GETDATE ())

dize işlevleri

Dize işlevleri, genellikle karakter veri türünden olan sütun değerlerini işler. Transact-SQL'de desteklenen dize işlevleri ve bunların kısa açıklamaları aşağıdaki tabloda gösterilmiştir:

Transact-SQL Dize İşlevleri
İşlev Sözdizimi Açıklama kullanım örneği
ASCII, UNICODE ASCII (karakter), UNICODE (karakter)

Belirtilen karakteri karşılık gelen ASCII tamsayısına dönüştürür.

ASCII ("W") SEÇ - 87 UNICODE SEÇ ("u") - 1102

CHAR, NCHAR CHAR (int), NCHAR (int)

ASCII kodunu (veya NCHAR ise Unicode'u) karşılık gelen karaktere dönüştürür.

CHAR SEÇ (87) - "W" NCHAR SEÇ (1102) - "u"

KARİNDEX CHARINDEX (str1, str2)

str2 dizesinde str1 alt dizesinin oluşumunun başlangıç ​​konumunu döndürür. str2 dizesi str1 alt dizesini içermiyorsa, dönüş değeri 0'dır.

5 SELECT CHARINDEX ("morf", "polimorfizm") döndürür

FARK FARK (str1, str2)

str1 ve str2 iki dizesinin SOUNDEX değerleri arasındaki fark olan 0 ile 4 arasında bir tamsayı döndürür. SOUNDEX yöntemi, dizenin sesini karakterize eden bir sayı döndürür. Bu yöntemi kullanarak, benzer sesli dizeleri tanımlayabilirsiniz. Yalnızca ASCII karakterleri için çalışır.

2 FARK SEÇ ("yazım", "anlatma") döndürür

SOL SAĞ SOL (str, uzunluk), SAĞ (str, uzunluk)

SOL işlevi için uzunluk parametresi tarafından belirtilen dizge dizgesinin ilk karakterlerinin sayısını ve SAĞ işlevi için dizge dizgisinin son uzunluk karakterlerini döndürür.

DECLARE @str nvarchar (30) = "Senkronizasyon"; - "Sync" döndürür SOL SEÇ (@str, 4) - "zats" döndürür SAĞ SEÇ (@str, 5)

UZUNLUK UZUNLUK (str)

Argümanda belirtilen karakter sayısını (bayt sayısını değil) sondaki boşluklar da dahil olmak üzere döndürür.

ALT ÜST ALT (str), ÜST (str)

LOWER işlevi, str1'in tüm büyük harflerini küçük harfe dönüştürür. Dizedeki küçük harfler ve diğer karakterler etkilenmez. UPPER işlevi, str'nin tüm küçük harflerini büyük harfe dönüştürür.

DECLARE @str nvarchar (30) = "Senkronizasyon"; - "SENKRONİZASYON" ÜST SEÇ (@str) döndürür - "SENKRONİZASYON" ALT SEÇ (@str) döndürür

LTRIM, RTRIM LTRIM (str), RTRIM (str)

LTRIM işlevi str dizesindeki baştaki boşlukları kaldırır, RTRIM buna göre dizenin sonundaki boşlukları kaldırır.

QUOTENAME QUOTENAME (char_string)

Giriş dizesini geçerli bir sınırlandırılmış tanımlayıcıya dönüştürmek için sınırlandırılmış bir Unicode dizesi döndürür.

DECLARE @str nvarchar (30) = "Senkronizasyon"; - "[Sync]" SELECT QUOTENAME (@str) döndürür

PATINDEX PATINDEX (%p%, expr)

Verilen ifade ifadesinde p kalıbının ilk oluşumunun başlangıç ​​konumunu veya verilen kalıp bulunamazsa sıfırı döndürür.

4 SELECT PATINDEX ("% chro%", "Senkronizasyon") döndürür

YER DEĞİŞTİRMEK DEĞİŞTİR (str1, str2, str3)

str1'deki tüm str2 oluşumlarını str3 ile değiştirir.

"Desenkronizasyon" SELECT REPLACE ("Senkronizasyon", "Senkronizasyon", "Desenkronizasyon") döndürür

TEKRARLAMAK ÇOĞALTMA (str, i)

str i dizesini tekrarlar.

"aBaBaBaBaB" SELECT REPLICATE ("aB", 5) döndürür

TERS GERİ DÖN (str)

str dizesini ters sırada çıkarır.

"yicazinorkhnis" SELECT REVERSE ("Senkronizasyon") döndürür

SOUNDEX SOUNDEX (str)

İki dizenin benzerliğini belirlemek için kullanılan dört karakterli soundex'i döndürür. Yalnızca ASCII karakterleri için çalışır.

UZAY BOŞLUK (uzunluk)

length parametresinde belirtilen uzunlukta bir boşluk dizesi döndürür. REPLICATE analogu ("", uzunluk).

STR STR (f [, uzun [, d]])

Belirtilen kayan nokta ifadesini f bir dizeye dönüştürür; burada len, ondalık nokta, işaret, sayılar ve boşluklar dahil olmak üzere dizenin uzunluğudur (varsayılan 10'dur) ve d döndürülecek ondalık basamak sayısıdır.

"3.14" SELECT STR (3.1415, 4, 2) döndürür

ŞEY STUFF (str1, a, uzunluk, str2)

A konumundan başlayarak str1 dizesinden uzunluk karakterlerini kaldırır ve yerlerine str2 dizesini ekler.

Bir kitaptaki not SELECT STUFF ("Notebook", 5, 0, "içinde") - El Kitabı SELECT STUFF ("Notebook", 1, 4, "El")

ABONELİK SUBSTRING (str1, a, uzunluk)

Uzunluk uzunluğunun bir alt dizesi olan a konumundan başlayarak str dizesinden alır.

Sistem fonksiyonları

Transact-SQL sistem işlevleri, veritabanı nesneleri hakkında kapsamlı bilgi sağlar. Çoğu sistem işlevi, oluşturulduğunda her veritabanı nesnesine atanan bir dahili sayısal tanımlayıcı (ID) kullanır. Bu tanımlayıcı aracılığıyla sistem, her bir veritabanı nesnesini benzersiz bir şekilde tanımlayabilir.

Aşağıdaki tablo, kısa bir açıklama ile birlikte en önemli sistem işlevlerinden bazılarını listeler:

Transact-SQL Sistem Fonksiyonları
İşlev Sözdizimi Açıklama kullanım örneği
DÖKÜM CAST (w AS tipi [(uzunluk)]

Varsa, w ifadesini belirtilen veri türüne dönüştürür. w argümanı herhangi bir geçerli ifade olabilir.

3 SELECT CAST (3.1258 AS INT) döndürür

BİRLİK BİRLEŞTİRME (a1, a2)

a1, a2, .... ifade listesinden ilk boş olmayan ifade değerini döndürür.

COL_LENGTH COL_LENGTH (nesne, sütun)

Veritabanı nesnesinin (tablo veya görünüm) nesnesinin sütun sütununun uzunluğunu döndürür.

4 SELECT COL_LENGTH ("Çalışan", "Kimlik") döndürür

DÖNÜŞTÜRMEK DÖNÜŞTÜR (tür [(uzunluk)], w)

CAST işlevine eşdeğerdir, ancak bağımsız değişkenler farklı şekilde belirtilir. Herhangi bir veri türü ile kullanılabilir.

GEÇERLİ ZAMAN DALGASI GEÇERLİ ZAMAN DALGASI

Geçerli tarih ve saati döndürür.

ŞU ANKİ KULLANICI ŞU ANKİ KULLANICI

Geçerli kullanıcının adını döndürür.

veriboyu VERİ BOYU (z)

z ifadesinin kapladığı bayt sayısını döndürür.

Bu sorgu, Çalışandan SELECT DATALENGTH (FirstName) her alanın uzunluğunu döndürür

GETANSINULL GETANSINULL ("dbname")

dbname veritabanında boş değerlerin kullanımı ANSI SQL standardını karşılıyorsa 1 döndürür.

ISNULL ISNULL (ifade, değer)

NULL değilse, ifadenin değerini döndürür; aksi takdirde değer döndürülür.

ISNUMERİK ISNUMERİK (ifade)

ifadenin geçerli bir sayısal tür olup olmadığını belirler.

YENİ KİMLİK YENİKimlik ()

UNIQUEIDENTIFIER veri türünün değerlerini depolamak için benzersiz bir 16 baytlık ikili dize oluşturur.

YENİSEQUENTIALID NEWSEQUENTIALID ()

Belirtilen bilgisayarda bu işlev tarafından önceden oluşturulmuş diğer GUID'lerden daha büyük bir GUID oluşturur. (Bu işlev yalnızca bir sütun için varsayılan olarak kullanılabilir.)

NULLIF NULLIF (ifade1, ifade2)

İfade1 ve ifade2 değerleri aynıysa null döndürür.

Sorgu, proje için NULL döndürür - bu, Number = "p1" olan SELECT NULLIF (Sayı, "p1") FROM Project

SUNUCU ÖZELLİĞİ SUNUCU ÖZELLİĞİ (özellik adı)

Veritabanı sunucusunun özellikleri hakkında bilgi alır.

SYSTEM_USER SYSTEM_USER

Geçerli kullanıcının kimliğini döndürür.

KULLANICI KİMLİĞİ KULLANICI KİMLİĞİ ()

Kullanıcı kimliği kullanıcı adını döndürür. Kullanıcı belirtilmemişse, geçerli kullanıcı kimliği döndürülür.

KULLANICI ADI KULLANICI ADI ()

Belirtilen kimliğe sahip kullanıcı adını döndürür. Tanımlayıcı belirtilmezse, geçerli kullanıcının adı döndürülür.

Meta veri işlevleri

Temel olarak, meta veri işlevleri, belirtilen bir veritabanı ve veritabanı nesneleri hakkında bilgi döndürür. Aşağıdaki tablo, kısa bir açıklama ile birlikte en önemli meta veri işlevlerinden bazılarını özetlemektedir:

Transact-SQL Meta Veri İşlevleri
İşlev Sözdizimi Açıklama kullanım örneği
COL_NAME COL_NAME (tab_id, col_id)

tab_id içeren tablonun belirtilen col_id'sine sahip sütunun adını döndürür.

"Soyadı" SELECT COL_NAME (OBJECT_ID ("Çalışan"), 3) sütun adını döndürür

KOLON ÖZELLİĞİ COLUMNPROPERTY (kimlik, sütun, özellik)

Belirtilen sütunla ilgili bilgileri döndürür.

PRECISION özelliğinin değerini döndürür - Çalışan tablosunun SELECT COLUMNPROPERTY (OBJECT_ID ("Çalışan"), "Id", "precision") kimlik sütunu için

VERİTABANI ÖZELLİĞİ DATABASEPROPERTY (veritabanı, özellik)

Veritabanı veritabanının özellik özelliğinin değerini döndürür.

IsNullConcat özelliğinin değerini döndürür - SampleDb veritabanı SELECT DATABASEPROPERTY ("SampleDb", "IsNullConcat") için

DB_ID DB_ID ()

db_name veritabanı tanımlayıcısını döndürür. Veritabanı adı belirtilmezse, geçerli veritabanının tanımlayıcısı döndürülür.

DB_NAME DB_NAME ()

db_id içeren veritabanının adını döndürür. Tanımlayıcı belirtilmezse, geçerli veritabanının adı döndürülür.

INDEX_COL INDEX_COL (tablo, ben, hayır)

Tablo tablosunun dizine alınmış sütununun adını döndürür. Sütun, dizin tanımlayıcısı i ve bu dizindeki sütunun konum numarası ile belirtilir.

INDEXPROPERTY INDEXPROPERTY (nesne_kimliği, dizin_adı, özellik)

Belirtilen tablo kimlik numarası, dizin veya istatistiklerin adı ve özelliğin adı için adlandırılmış dizin veya istatistiklerin özelliklerini döndürür.

NESNE ADI OBJECT_NAME (obj_id)

obj_id tanımlayıcısına sahip veritabanı nesnesinin adını döndürür.

NESNE_NAME SEÇ (245575913);

NESNE KİMLİĞİ NESNE_ID (nesne_adı)

Veritabanının nesne tanımlayıcısı obj_name'yi döndürür.

245575913 döndürür - Çalışan tablosu kimliği SELECT OBJECT_ID ("Çalışan")

OBJECTPROPERTY OBJECTPROPERTY (obj_id, özellik)

Geçerli veritabanındaki nesneler hakkında bilgi verir.

Merhaba blog sitesinin sevgili okuyucuları. Bugün SQL dili ve özellikle metin işleme fonksiyonları hakkında konuşmak istiyorum. Bir web sitesi oluşturmak ve yönetmek için genellikle SQL dilini bilmek gerekli değildir. İçerik yönetim sistemleri, site içeriğini sorgu yazmadan düzenlemenize olanak tanır. Ancak, yapılandırılmış sorgu diline en azından yüzeysel bir aşinalık, sitenizin veritabanındaki verilerin değiştirilmesini ve yönetimini önemli ölçüde hızlandırmanıza yardımcı olacaktır.

Sıklıkla görevlerle karşılaşıyorum: veritabanının metin alanlarından metnin bir kısmını kaldırmak, dize verilerini veya metinle ilgili başka bir şeyi birleştirmek. Tüm bunları site yönetici panelleri üzerinden yapmak çok zahmetli ve sıkıcıdır. Tüm bu adımları birkaç saniye içinde yapan bir veritabanı sorgusu yazmak çok daha kolaydır.

O halde başlayalım...

sql dilinde sembolik fonksiyonlar

En basitinden sırayla başlayalım. İlk olarak, metin karakterlerinin ASCII kodunu belirlemek için kullanılan ASCII dize işlevine bakalım:

tam sayı ASCII(str sicim)

İşlev bir tamsayı değeri döndürür - str dizesinin ilk sol karakterinin ASCII kodu. str dizesi boşsa, 0 ve str dizesi yoksa NULL döndürür.

SEÇ ASCII ("t");
pozisyon: 116
SEÇ ASCII ("test");
pozisyon: 116
ASCII'yi SEÇ (1);
pozisyon: 49

tam sayı ORD(str sicim)

str'nin soldaki ilk karakteri çok baytlıysa, kodunu şu biçimde döndürür: ((ilk bayt ASCII kodu) * 256 + (ikinci bayt ASCII kodu)) [* 256 + üçüncü bayt ASCII kodu ...]. str dizesinin ilk sol karakteri çok baytlı değilse, bir ASCII işlevi olarak çalışır - ASCII kodunu döndürür.

SEÇ ORD ("test");
pozisyon: 116

ASCII işleviyle yakından ilişkili olan CHAR işlevi tam tersini yapar:

sicim CHAR(int tam sayı, ...)

CHAR işlevi, ASCII kodlarına göre bir karakter dizisi döndürür. Değerler arasında NULL bulunursa atlanır.

CHAR SEÇ (116, "101", 115, "116");
Sonuç: "deneme"

dize birleştirme için SQL işlevleri

En popüler özellik kategorilerinden biri. Sonuçta, genellikle site veritabanı tablolarının çeşitli alanlarının değerlerini birleştirmek gerekir. SQL dilinde aynı anda birkaç fonksiyon vardır. dize birleştirme.

BİRLEŞTİR işlevi:

sicim İLETİŞİM(str1 sicim, str2 sicim,...)

İşlev, bağımsız değişkenleri birleştirerek oluşturulan bir dize döndürür. İkiden fazla argüman belirtilebilir. Argümanlardan biri NULL ise, döndürülen sonuç NULL olacaktır. Sayısal değerler dizelere dönüştürülür.

CONCAT SEÇ ("Merhaba", "", "dünya", "!");
Sonuç: "Merhaba dünya!"
CONCAT SEÇ ("Merhaba", NULL, "dünya", "!");
Sonuç: BOŞ
BİRLEŞTİRME SEÇ ("pi sayısı", "=", 3.14);
Sonuç: "pi sayısı = 3.14"

Örneklerden de görebileceğiniz gibi, dizeler sınırlayıcı olmadan birleştirilmiştir. İlk örnekte kelimeleri ayırmak için argüman olarak bir boşluk kullanmanız gerekir. Daha fazla kelime olsaydı, her seferinde boşluk eklemek çok uygun olmazdı.

Bu gibi durumlar için CONCAT_WS işlevi vardır:

sicim CONCAT_WS(ayırıcı sicim, str1 sicim, str2 sicim,...)

İşlev, BİRLEŞTİR işlevi gibi dizeleri birleştirir, ancak bağımsız değişkenler arasına bir ayırıcı ekler. Ayırıcı NULL ise sonuç NULL olur. NULL dize bağımsız değişkenleri atlanır.

SELECT CONCAT_WS ("", "İvanov", "İvan", "İvanoviç");
Sonuç: "İvanov İvan İvanoviç"
CONCAT_WS SEÇ (BOŞ, "İvanov", "İvan", "İvanoviç");
Sonuç: BOŞ
SELECT CONCAT_WS ("", "İvanov", NULL, "İvan", "İvanoviç");
Sonuç: "" İvanov İvan İvanoviç "

Bir ayırıcı ile ayrılması gereken çok sayıda dizgenin birleştirilmesi durumunda, CONCAT_WS işlevi CONCAT işlevinden çok daha uygundur.

Bazen bir karakteri tekrar ederek bir dizeyi belirli sayıda karaktere kadar uzatmak gerekir. Bu aynı zamanda bir tür dizi birleştirmedir. Bunu yapmak için işlevleri kullanabilirsiniz. LPAD ve RPAD... İşlevler aşağıdaki sözdizimine sahiptir:

sicim LPAD(str sicim, uzun tam sayı, padstr sicim)
sicim RPAD(str sicim, uzun tam sayı, padstr sicim)

LPAD işlevi, padstr ile sol-dolgulu str'yi uzunluk len'e döndürür. Uzamanın sağ tarafta gerçekleşmesi dışında RPAD işlevi de aynı şeyi yapar.

LPAD SEÇ ("test", 10, ".");
Sonuç: ...... test
RPAD SEÇ ("test", 10, ".");
Sonuç: test ......

Bu fonksiyonlarda dikkat etmeniz gereken parametre alanı, görüntülenecek karakter sayısını sınırlar. Bu nedenle, str dizesinin uzunluğu len parametresinden büyükse, dize kesilecektir:

LPAD SEÇ ("test", 3, ".");
sonuç: tes

SQL sorgularında dize uzunluğunu belirleme

SQL dilinde bir dizedeki karakter sayısını belirlemek için LENGTH işlevi sorumludur - dizenin uzunluğu:

tam sayı UZUNLUK(str sicim)

İşlev, str'deki karakter sayısına eşit bir tamsayı döndürür.

UZUNLUK SEÇ ("test");
Sonuç: 4

Çok baytlı kodlamaların kullanılması durumunda, LENGTH işlevi doğru sonucu döndürmez. Örneğin, unicode kodlama ayarlanmışsa, istek:

UZUNLUK SEÇ ("test");

8 dönecektir. Kolayca görebileceğiniz, gerçek karakter sayısının iki katıdır. Bu durumda CHAR_LENGTH işlevini kullanmanız gerekir:

tam sayı CHAR_LENGTH(str sicim)

İşlev ayrıca döner çizgi uzunluğu str ve destekler çok baytlı karakterler.

Örneğin:

SEÇ CHAR_LENGTH ("test");
Sonuç: 4

sql kullanarak bir dizede bir alt dize arayın

Sql dilinde bir dizgedeki bir alt dizginin konumunu hesaplamak için çeşitli işlevler vardır. İlk bakacağımız POSITION işlevidir:

tam sayıKONUM(alt dizi sicim IN str sicim)

str dizesinde alt dize alt dizesinin ilk oluşumunun konum numarasını döndürür ve alt dize bulunamazsa 0 döndürür. KONUM işlevi, çok baytlı karakterleri işleyebilir.

POZİSYON SEÇ ("abcdcde" İÇİNDE "cd");
Sonuç: 3
POZİSYON SEÇ ("abcdcde" İÇİNDE ("xy");
Sonuç: 0

Aşağıdaki LOCATE işlevi, belirli bir konumda bir alt dize aramaya başlamanıza olanak tanır:

tam sayı YERLEŞTİR(alt dizi sicim, cadde sicim, konum tam sayı)

Konum konumundan başlayarak, dizge dizgisinde alt dizgenin ilk oluşumunun konumunu döndürür. pos parametresi belirtilmemişse, arama dizenin başından itibaren gerçekleştirilir. substr bulunamazsa 0 döndürür. Çok baytlı karakterleri destekler.

SELECT LOCATE ("cd", "abcdcdde", 5);
Sonuç: 5
SELECT LOCATE ("cd", "abcdcdde");
Sonuç: 3

INSTR işlevi, KONUM ve YERLEŞTİR işlevlerine benzer:

tam sayı INSTR(str sicim, alt dizi sicim)

Yukarıdaki işlevin yanı sıra dize str'de substring substr'nin ilk oluşumunun konumunu döndürür. KONUM ve YERLEŞTİR işlevlerinden tek fark, bağımsız değişkenlerin yer değiştirmesidir.

İlk olarak, eylemlerine benzer iki SOL ve SAĞ işlevi aynı anda ele alacağız:

sicim SOL(str sicim, uzun tam sayı)
sicim SAĞ(str sicim, uzun tam sayı)

LEFT işlevi, dizge dizgisinin ilk karakterlerinin len'ini döndürür ve SAĞ işlevi, son karakterlerin aynı sayısını döndürür. Çok baytlı karakterleri destekler.

SOL SEÇ ("Moskova", 3);
Sonuç: Mos
SAĞ SEÇ ("Moskova", 3);
sonuç: kva

sicim ABONELİK(str sicim, konum tam sayı, uzun tam sayı)
sicim ORTA(str sicim, konum tam sayı, uzun tam sayı)

İşlevler, konum konumundan str uzunluğunda len karakterlerinin bir alt dizesini almanıza izin verir. Len parametresi belirtilmezse, pos konumundan başlayan tüm alt dize döndürülür.

SELECT SUBSTRING ("Moskova Rusya'nın başkentidir", 4, 6);
Sonuç: Moskova
SELECT SUBSTRING ("Moskova Rusya'nın başkentidir", 4);
Sonuç: Moskova, Rusya'nın başkentidir

Sonuçlar benzer olacağı için MID fonksiyonu ile örnek vermiyorum.

İlginç SUBSTRING_INDEX işlevi:

sicim SUBSTRING_INDEX(str sicim, sınırlandırmak sicim, saymak tam sayı)

İşlev, konum sayısındaki sınırlamadan sonraki karakterleri kaldırarak elde edilen dizgenin alt dizesini döndürür. Sayım parametresi pozitif veya negatif olabilir. Sayım pozitif ise, ayırıcının konumu soldan sayılacak ve ayırıcının sağındaki karakterler silinecektir. Sayı negatif ise, ayırıcının konumu sağda sayılır ve ayırıcının solundaki karakterler kaldırılır. Belki de açıklama çok kafa karıştırıcı oldu, ancak örneklerle daha net hale gelecektir.

SEÇ SUBSTRING_INDEX ("www.mysql.ru", ".", 1);
Sonuç: www

Bu örnekte, işlev, "www.mysql.ru" dizesindeki nokta karakterinin ilk oluşumunu bulur ve ayırıcının kendisi de dahil olmak üzere, onu izleyen tüm karakterleri kaldırır.

SEÇ SUBSTRING_INDEX ("www.mysql.ru", ".", 2);
Sonuç: www.mysql

Burada işlev, noktanın ikinci oluşumunu arar, sağındaki tüm karakterleri kaldırır ve elde edilen alt dizeyi döndürür. Ve count parametresi için negatif değere sahip başka bir örnek:

SEÇ SUBSTRING_INDEX ("www.mysql.ru", ".", -2);
Sonuç: mysql.ru

Bu örnekte, SUBSTRING_INDEX işlevi sağdan sayarak ikinci noktayı arar, solundaki karakterleri kaldırır ve sonuçtaki alt dizeyi verir.

Bir dizeden boşlukları kaldırma

SQL'de bir dizenin başındaki ve sonundaki fazladan boşlukları kaldırmak için üç işlev vardır.

LTRIM işlevi:

sicim LTRIM(str sicim)

str'nin başlangıcındaki boşlukları kaldırır ve sonucu döndürür.

RTRIM işlevi:

sicim RTRIM(str sicim)

Ayrıca str'deki boşlukları yalnızca sondan kaldırır. Her iki işlev de çok baytlı karakterleri destekler.

SEÇ LTRIM ("metin");
Sonuç: "metin"
RTRIM SEÇ ("metin");
Sonuç: "metin"

Ve üçüncü TRIM işlevi, bir dizenin başındaki ve sonundaki boşlukları hemen kaldırmanıza olanak tanır:

sicim KIRMIZI([ sicim KİMDEN] str sicim)

str parametresi gereklidir, geri kalan parametreler isteğe bağlıdır. Yalnızca bir str parametresi belirtilirse, aynı anda dizenin başındaki ve sonundaki boşlukları kaldırarak str dizesini döndürür.

KIRMIZI SEÇ ("metin");
Sonuç: "metin"

remstr parametresi, dizenin başından ve sonundan kaldırılacak karakterleri veya alt dizeleri belirtmek için kullanılabilir. BOTH, LEADING, TRAILING kontrol parametrelerini kullanarak, karakterlerin nereden kaldırılacağını belirleyebilirsiniz:

  • BOTH - remstr alt dizesini dizenin başından ve sonundan kaldırır;
  • LİDER - remstr'yi satırın başından kaldırır;
  • TRAILING - remstr'yi satırın sonundan kaldırır.

TRIM SEÇ (HEM "ve" "metinden");
Sonuç: "metin"
TRIM SEÇİN ("textaa" DAN BAŞLICA "ve");
Sonuç: "metin"
TRIM SEÇİN (SONRAKİ "ve" "aaatext" DEN);
Sonuç: "aaametin"

SPACE işlevi, belirli sayıda boşluktan oluşan bir dize elde etmenizi sağlar:

sicim UZAY(n tam sayı)

n boşluktan oluşan bir dize döndürür.

DEĞİŞTİR işlevi için gereklidir bir dizgede verilen karakterleri değiştirir:

sicim YER DEĞİŞTİRMEK(str sicim, from_str sicim, to_str sicim)

İşlev, str'deki tüm from_str alt dizelerini to_str ile değiştirir ve sonucu döndürür. Çok baytlı karakterleri destekler.

SELECT REPLACE ("alt dize değiştirme", "alt dize", "metin")
Sonuç: "metin değiştirme"

TEKRAR işlevi:

sicim TEKRARLAMAK(str sicim, saymak tam sayı)

İşlev, str'nin sayı tekrarlarından oluşan bir dize döndürür. Çok baytlı karakterleri destekler.

TEKRAR SEÇ ("w", 3);
Sonuç: "www"

REVERSE işlevi satırı tersine çevirir:

sicim TERS(str sicim)

Tüm karakterleri str'de sondan ilke değiştirir ve sonucu döndürür. Çok baytlı karakterleri destekler.

TERSİNİ SEÇ ("metin");
Sonuç: "tsket"

Bir dizeye bir alt dize eklemek için INSERT işlevi:

sicimSOKMAK(str sicim, konum tam sayı, uzun tam sayı, haber sicim)

pos konumunda str'ye newstr alt dizesinin eklenmesinden elde edilen dizeyi döndürür. len parametresi, pos konumundan başlayarak str'den kaç karakterin kaldırılacağını belirtir. Çok baytlı karakterleri destekler.

SELECT INSERT ("metin", 2, 5, "MySQL");
Sonuç: "tMySQL"
"SELECT INSERT ("metin", 2, 0," MySQL ");
Sonuç: "tMySQLext"
SELECT INSERT ("metin ekle", 2, 7, "MySQL");
Sonuç: "SELECT INSERT ("metin ekle", 2, 7," MySQL ");"

Metindeki tüm büyük harfleri aniden büyük harflerle değiştirmeniz gerekirse, iki işlevden birini kullanabilirsiniz:

sicim LCASE(str sicim) ve sicim DAHA DÜŞÜK(str sicim)

Her iki işlev de str'deki büyük harfleri değiştirir ve sonucu döndürür. Her ikisi de çok baytlı karakterleri destekler.

SELCET ALT ("ABVGDeZhZiKL");
Sonuç: "abvgdezhzikl"

Aksine, büyük harfleri büyük harflerle değiştirmek gerekirse, iki işlevden biri de kullanılabilir:

sicim UCASE(str sicim) ve sicimÜST (satır sicim)

İşlevler, tüm büyük harfleri büyük harflerle değiştirerek str dizesini döndürür. Ayrıca çok baytlı karakterleri destekler.
Örnek:

BÜYÜK SEÇ ("Avgdezhz");
Sonuç: "ABVGDEZHZ"

SQL dilinde bu makalede tartışılandan biraz daha fazla dize işlevi vardır. Ancak burada tartışılan işlevlerin çoğu nadiren kullanıldığı için onları incelemeyi bitireceğim. Sonraki makalelerde SQL string fonksiyonlarını kullanmanın gerçek pratik örneklerine bakmaya çalışacağım. Bu yüzden blog güncellemelerine abone olmayı unutmayın. Bir sonrakine kadar!

BOL'den alınan dize işlevlerinin tam listesi:

Sonuç - 11. Hangi harfler olduklarını bulmak için, bilinen bir ASCII kodunu (0'dan 255'e kadar) kullanarak bir karakter döndüren CHAR işlevini kullanabiliriz:

Ve örneğin, tüm alfabetik karakterlerin kod tablosunu şu şekilde alabilirsiniz:

SELECT CHAR (ASCII ("a") + num-1) harfi, ASCII ("a") + num - 1 FROM (SELECT 5 * 5 * (a-1) + 5 * (b-1) + c AS num) FROM (SEÇ 1 a BİRLİK TÜMÜ SEÇİM 2 BİRLİK TÜMÜ SEÇİM 3 BİRLİK TÜM SEÇİM 4 BİRLİK TÜM SEÇİM 5) x CROSS JOIN (SELECT 1 b UNION TÜM SEÇİM 2 BİRLİK TÜM SEÇİM 3 BİRLİK TÜM SEÇİM 4 BİRLİK TÜM SEÇİM 5) y CROSS JOIN ( SELECT 1 c UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5) z) x WHERE ASCII ("a") + num -1 ARASINDA ASCII ("a") VE ASCII ("z")

Henüz bir sayı dizisinin oluşturulmasından haberdar olmayanlar için ilgili makaleye atıfta bulunuyorum.

Bildiğiniz gibi küçük ve büyük harflerin kodları farklıdır. Bu nedenle, sorguyu yeniden yazmadan eksiksiz bir set elde etmek için yukarıdaki koda benzer bir tane eklemeniz yeterlidir:

Gerekirse bu mektubu tabloya eklemek zor olmayacak sanırım.

Şimdi bir dizge ifadesinde gerekli alt dizgiyi bulma problemini düşünün. Bunun için kullanılabilecek iki işlev vardır - KARİNDEX ve PATINDEX... Her ikisi de dizedeki alt dizenin başlangıç ​​konumunu (alt dizenin ilk karakterinin konumu) döndürür. CHARINDEX işlevi sözdizimine sahiptir:

KARİNDEKS ( arama_ifadesi, dize_ifadesi[, başlangıç ​​konumu])

İşte isteğe bağlı bir tamsayı parametresi başlangıç ​​konumu aramanın gerçekleştirildiği dize ifadesindeki konumu tanımlar arama_ifadesi... Bu parametre atlanırsa, arama baştan yapılır dize_ifadesi... Örneğin, istek

İstenen alt dize veya dize ifadesi NULL ise, işlevin sonucunun da NULL olacağına dikkat edilmelidir.

Aşağıdaki örnek, "California" gemi adındaki "a" karakterinin birinci ve ikinci tekrarlarının konumlarını tanımlar.

Ve burada, örneğin, ilki ve sonuncusu "e" olan üç karakterlik bir dizi içeren gemilerin adlarını nasıl bulabilirsiniz:

buhar odası SOL işlev SAĞ dize ifadesinin sağına belirtilen sayıda karakteri döndürür:

SAĞ (<dize ifadesi>,<Karakter sayısı>)

Örneğin, aynı harfle başlayan ve biten gemi adlarını şu şekilde tanımlayabilirsiniz:

Burada sınıf adını ve gemi adını bir boşlukla ayırıyoruz. Ek olarak, bir fonksiyonun argümanı olarak tüm yapıyı tekrar etmemek için bir alt sorgu kullanıyoruz. Sonuç şöyle görünecektir:

Bu durumu ortadan kaldırmak için başka bir yararlı işlev kullanabilirsiniz. UZUNLUK (<dize ifadesi>) dizedeki karakter sayısını döndürür. Kendimizi karakter sayısının birden fazla olduğu durumla sınırlayalım:

İşlev TEKRARLAMAK"abcde" sabitini, işlev tarafından dikkate alınmayan, sağda beş boşlukla doldurma UZUNLUK, - her iki durumda da 5 elde ederiz.
İşlev veriboyu bir değişkenin temsilindeki bayt sayısını döndürür ve bize CHAR ile VARCHAR arasındaki farkı gösterir. veriboyu bize CHAR için 12 ve VARCHAR için 10 verecek.
Beklenildiği gibi, veriboyu bir VARCHAR değişkeni için değişkenin gerçek uzunluğunu döndürdü. Ancak CHAR türünde bir değişken için sonuç neden 12'ye eşit? Mesele şu ki, CHAR bir tür sabit uzunluk... Değişkenin değeri uzunluğundan küçükse ve uzunluğu CHAR (12) olarak bildirdik, o zaman değişkenin değeri, sonuna boşluklar eklenerek gerekli uzunluğa "hizalanır".

Site, metin biçiminde sunulan değerleri sayısal sıraya göre sıralamak (maksimum bulmak vb.) İstediğiniz görevleri içerir. Örneğin, uçak koltuk numarası ("2d") veya CD hızı ("24x"). Sorun, metnin bu şekilde sıralanmasıdır (artan)

Yerleri artan sıraya göre düzenlemek isteniyorsa sıra aşağıdaki gibi olmalıdır.

Kendimizi bununla sınırlandırırsak,

sıralamak için kalır

Bugün basit kullanım örneklerini düşünmeyi öneriyorum Transact-SQL dize işlevleri ve bazı işlevlerin yalnızca bir açıklaması ve örnekleri değil, bunların kombinasyonu, yani. standart işlevler birçok görevi yerine getirmek için yeterli olmadığından ve bunları birlikte kullanmanız gerektiğinden bunları nasıl iç içe geçirebilirsiniz. Bu yüzden size bu tür sorguları yazmanın birkaç basit örneğini göstermek istiyorum.

SQL string fonksiyonlarına zaten baktık ama bu dilin farklı DBMS'lerdeki uygulamaları farklı olduğu için, örneğin bazı fonksiyonlar Transact-SQL'de değil, PL / PGSql'de var ve sadece son kez string'e baktık. plpgsql'de kullanılabilecek fonksiyonlar ve bu nedenle bugün özellikle Transact-SQL hakkında konuşacağız.

SUBSTRING, CHARINDEX ve LEN nasıl birleştirilebilir?

Ve böylece, örneğin, belirli bir kritere göre bir dizgede onun bir parçasını aramanız ve kesmeniz ve sadece aynı türden bir parçayı değil, dinamik olarak, yani. arama dizesi her satır için farklı olacaktır. Örnekler Management Studio SQL Server 2008'de yazılacaktır.

Bunun için aşağıdaki işlevleri kullanacağız:

  • ABONELİK(str, start, len) - bu işlev, bir dizenin bir kısmını başka bir dizeden keser. Üç parametresi vardır 1. Bu, dizenin kendisidir; 2. Kesmeye başlamak için başlangıç ​​konumu; 3. Karakter sayısı, kaç tane kesilmesi gerekiyor.
  • KARİNDEX(str1, str2) - str1'i str2'de arar ve böyle bir dize bulunursa ilk karakterin sırasını döndürür. Aramayı hangi taraftan başlatacağınızı belirleyebileceğiniz üçüncü bir isteğe bağlı parametreye sahiptir.
  • UZUNLUK(str1), dizenin uzunluğudur, yani. Karakterler.

Gördüğünüz gibi, burada değişken bildirimini kullandım ve istekte değişkenler yerine kendi alanlarınızı değiştirebilirsiniz. İşte kodun kendisi:

@rezult as varchar (10) - kaynak dizesi @ str1 as varchar (100) - arama dizesi @ str2'yi varchar olarak bildirir (10) set @ str1 = "Dize dizesini içinde başka bir dize aramak için test edin" set @ str2 = "string" set @ rezult = substring (@ str1, CHARINDEX (@ str2, @ str1), LEN (@ str2)) @rezult'u seçin

Buradaki nokta, len işlevini kullanarak, kaç karakterin kesilmesi gerektiğini bulmamız ve charindex'in kesmeye başlayacağı konumu belirlemesi ve buna göre alt dizenin seçimi dizede gerçekleştirmesidir.

LEFT, RIGHT ve LEN nasıl birleştirilebilir?

Diyelim ki bir dizedeki ilk birkaç karakteri almanız veya bir dizedeki bu ilk karakterleri bir şeyin, örneğin bir sayı olup olmadığını ve uzunluğunun doğal olarak farklı olup olmadığını kontrol etmeniz gerektiğini varsayalım (elbette bir test örneği).

  • Sol(str, kol) - işlev belirtilen sayıda karakteri soldan keser, iki parametreye sahiptir, ilki bir dize ve ikincisi sırasıyla karakter sayısıdır;
  • Doğru(str, kol) - işlev belirtilen sayıda karakteri sağdan keser, parametreler aynıdır.

Şimdi tabloya karşı basit sorgular kullanacağız

İlk önce bir test_table oluşturalım:

TABLO OLUŞTUR (KİMLİK (1,1) NULL DEĞİL, (18, 0) NULL, (50) BOŞ, KISITLI BİRİNCİL ANAHTAR (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCPOWS) ON İLE KÜMELENMİŞ (ASC) = ) HAREKETTE

Test verileriyle dolduralım ve aşağıdaki sorguları yazalım:

Anladığınız gibi, ilk sorgu yalnızca tüm satırların bir seçimidir (SQL Basics - select deyimi) ve ikincisi, işlevlerimizin doğrudan bir birleşimidir, işte kod:

test_table numarasından * seçin, soldan (metin, UZUNLUK (sayı)) test_table'dan str olarak seçin

Ve bu sayılar sağda olsaydı, işlevi kullanırdık. SAĞ.

Rtrim, Ltrim, Upper ve Lower'ı birlikte kullanma

Başında ve sonunda boşluk olan bir satırınız olduğunu varsayarsak, elbette onlardan kurtulursunuz ve örneğin, bu satırdaki ilk harf büyük olacak şekilde onları yaparsınız.

  • Rtrim(str) - sağdan boşlukları kaldırır;
  • Ltrim(str) - soldan boşlukları kaldırır;
  • Üst(str) - dizeyi büyük harfe dönüştürür;
  • Daha düşük(str) - dizeyi küçük harfe dönüştürür.

Gördüğünüz gibi, sabitlemek için burada da kullandık alt dize ve uzun... Sorgunun anlamı basit, hem sağdan hem de soldan boşlukları kaldırıyoruz, sonra ilk karakteri kesip büyük harfe dönüştürüyoruz, sonra bu karakteri string'in geri kalanıyla birleştiriyoruz (işleç +) . İşte kod:

@ str1'i varchar olarak bildirin (100) set @ str1 = "baştaki ve sonundaki boşluklu test dizesi" select @ str1 üst (alt dize (rtrim (ltrim (@ str1)), 1,1)) + alt (alt dize ( rtrim ( ltrim (@ str1)), 2, LEN (rtrim (ltrim (@ str1))) - 1))

Bugünlük bence bu kadarı yeterli ve eğer SQL programlamayı seviyorsanız bu sitede örneğin bu çok ilginç konuya bir kereden fazla değindik.