Internet Windows Android
Kengaytirish

Sql string funktsiyalari paydo bo'lishini topadi. SQL string funktsiyalari

Biz SQL so'rovlar tilini o'rganishni davom ettirmoqdamiz va bugun gaplashamiz SQL string funktsiyalari... Biz asosiy va tez -tez ishlatiladigan simli funktsiyalarni ko'rib chiqamiz, masalan: Pastroq, LTRIM, almashtiring va boshqalar, biz hamma narsani, albatta, misollar bilan ko'rib chiqamiz.

Ismni tanlang || familiyasi AS FIO jadvalidan

Yoki bo'sh joy ajratish uchun kiriting

Ismni tanlang || "" || familiyasi AS FIO jadvalidan

o'sha. ikkita vertikal chiziq ikkita ustunni birlashtiradi va ularni bo'sh joy bilan ajratish uchun men ularning orasiga bo'sh joy qo'yaman ( har qanday belgidan foydalanishingiz mumkin, masalan, chiziqcha yoki yo'g'on nuqta apostroflarda, shuningdek ikkita vertikal chiziq bilan birlashtirilgan ( Transact-SQL ikkita vertikal chiziq o'rniga + dan foydalanadi).

INITCAP funktsiyasi

Keyinchalik juda foydali funksiya keladi, INITCAP- har bir so'z katta harf bilan boshlanadigan va kichik harflar bilan davom etadigan satrdagi qiymatni qaytaradi. Agar siz u yoki bu ustunda to'ldirish qoidalariga rioya qilmasangiz va hamma narsani chiroyli shaklda ko'rsatish uchun zarur bo'lsa, bu funktsiyadan foydalanishingiz mumkin, masalan, jadvalingizda ismlar ustunidagi yozuvlar quyidagi shakl: IVAN Ivanov yoki Petr Petrov, siz bu funktsiyadan foydalanasiz.

INITCAP (ism) ni jadvaldan FIO sifatida tanlang

Va siz buni shunday olasiz.

UPPER funktsiyasi

Shunga o'xshash funktsiya, faqat bosh harf bilan yozilgan barcha belgilarni qaytaradi YUQORI.

Jadvaldan FIO sifatida yuqori (ism) ni tanlang

  • ism - ustun nomi;
  • 20 - belgilar soni ( maydon uzunligi);
  • "-"-bu kerakli belgilar soniga to'ldiriladigan belgi.

RPAD funktsiyasi

Keling, darhol teskari funktsiyani ko'rib chiqaylik. RPAD- harakat va sintaksis LPAD bilan bir xil, faqat o'ngdagi belgilar to'ldirilgan ( chapdagi LPADda).

RPADni (ism, 20, "-") jadvaldan nom sifatida tanlang

Ivan ——————-
Sergey -----

LTRIM funktsiyasi

Keyingi - ba'zi hollarda foydali funktsiya, LTRIM- bu funksiya siz ko'rsatgan eng chap belgilarni olib tashlaydi. Masalan, sizning ma'lumotlar bazangizda "shahar" ustuni bor, unda shahar "Moskva", shuningdek "Moskva" deb ko'rsatilgan shaharlar ham bor. Lekin siz hisobotni faqat "g" holda "Moskva" shaklida ko'rsatishingiz kerak. Siz faqat "g" naqshini belgilaysiz. va agar chap tomonda joylashgan belgilar "g" harfi bilan boshlansa, bu belgilar ko'rsatilmaydi.

LTRIMni (shahar, "shahar") jadval sifatida tanlang

Bu funksiya chapdagi belgilarni skanerlaydi, agar satr boshida naqshda belgilar bo'lmasa, u yacheykaning asl qiymatini qaytaradi, agar bo'lsa, ularni o'chirib tashlaydi.

RTRIM funktsiyasi

Keling, darhol teskari funktsiyani ko'rib chiqaylik. RTRIM- LTRIM bilan bir xil, faqat o'ngda belgilar qidiriladi.

Eslatma! Transact-SQLda RTRIM va LTRIM funktsiyalari mos ravishda o'ng va chapdagi bo'shliqlarni olib tashlaydi.

REPLACE funktsiyasi

Endi shunday qiziqarli funktsiyani ko'rib chiqaylik O'zgartirish- barcha belgilar mosligi siz ko'rsatgan belgilar bilan almashtirilgan qatorni qaytaradi. U nima uchun ishlatilishi mumkin, masalan, sizning ma'lumotlar bazangizda ustunlar mavjud, ular ichida bir -biridan ajratuvchi belgilar mavjud, masalan "/". Masalan, Ivan / Ivanov va siz Ivan-Ivanovni ko'rsatishni xohlaysiz, keyin yozing

Jadvaldan O'zgartirishni tanlang (ism, "/", "-")

va siz ramzlarning o'rnini bosasiz.

Bu funksiya faqat belgilarning to'liq mosligini almashtiradi, masalan, siz "-" ni belgilasangiz, ya'ni. u faqat uchta chiziqni qidiradi va keyingi funktsiyadan farqli o'laroq, har bir chiziqni almashtirmaydi.

TRANSLATE funktsiyasi

TARJIMA- satrdagi barcha belgilarni siz ko'rsatgan belgilar bilan almashtiradigan string funktsiyasi. Funktsiya nomiga asoslanib, bu to'liq chiziqli tasma deb taxmin qilishingiz mumkin. Bu funktsiya va REPLACE o'rtasidagi farq shundaki, u siz ko'rsatgan har bir belgining o'rnini bosadi, ya'ni. Sizda uchta belgi bor, aytaylik abc va TRANSLATE yordamida siz uni abc bilan almashtirishingiz mumkin, shuning uchun sizda a = a, b = b, c = c bo'ladi va bu tamoyilga ko'ra, belgilarning barcha mosligi almashtiriladi. Agar siz REPLACE bilan almashtirgan bo'lsangiz, unda siz ketma -ket joylashgan abc belgilarining to'liq mosligini qidirgansiz.

SUBSTR funktsiyasi

SUBSTR- bu funksiya faqat siz ko'rsatgan belgilar oralig'ini qaytaradi. Boshqacha qilib aytganda, 10 ta belgidan iborat qatorni aytaylik, sizga o'ntasi ham kerak emas, lekin aytaylik, sizga faqat 3-8 ( uchdan sakkizgacha). Ushbu funktsiya yordamida siz buni osonlikcha bajarishingiz mumkin. Masalan, ma'lumotlar bazasida aniqlangan uzunlikdagi identifikatoringiz bor (masalan, AA-BB-55-66-CC) va har bir belgi kombinatsiyasi nimani anglatadi. Va bir zumda sizga faqat 2 va 3 ta belgilar kombinatsiyasini ko'rsatish kerak edi, buning uchun siz quyidagi shakldagi so'rovni yozasiz.

Jadvaldan SUBSTR (identifikator, "4", "8") ni tanlang

o'sha. biz barcha belgilarni 4 dan boshlaymiz va 8 bilan tugaymiz va bu so'rovdan so'ng siz buni olasiz:

LENGTH funktsiyasi - satr uzunligi

Keyingi funktsiya ham foydali bo'lishi mumkin UZOQLIK- bu satrdagi belgilar sonini hisoblaydi. Masalan, ustunning har bir katakchasida nechta belgi borligini aniqlash kerak, aytaylik "ism", shunga o'xshash jadval.

Jadvaldan uzunlikni tanlang (ism)

bu so'rovdan so'ng siz buni olasiz.

4
6
7

Bu erda biz siz bilan bo'ldik va SQL satrining asosiy funktsiyalarini ko'rib chiqdik. Biz keyingi maqolalarda SQLni o'rganishni davom ettiramiz.

Transact-SQL funktsiyalari agregat yoki skalyar bo'lishi mumkin. Ushbu turdagi funktsiyalar ushbu maqolada muhokama qilinadi.

Birlashtiruvchi funktsiyalar

Umumiy funktsiyalar ustunlar guruhlari bo'yicha hisob -kitoblarni amalga oshiradi va har doim bitta hisobni qaytaradi. Transact-SQL bir nechta umumiy funktsiyalarni qo'llab-quvvatlaydi:

AVG

Ustundagi ma'lumotlarning arifmetik o'rtacha qiymatini hisoblab chiqadi. Hisoblanadigan qiymatlar raqamli bo'lishi kerak.

MIN va MAX

Ustundagi barcha ma'lumotlar qiymatlarining maksimal va minimal qiymatini aniqlang. Qiymatlar raqamli, satrli yoki vaqtli bo'lishi mumkin (sana / vaqt).

SUM

Ustundagi umumiy qiymatlarni hisoblab chiqadi. Baholanayotgan qiymatlar raqamli bo'lishi kerak.

COUNT

Ustundagi nol bo'lmagan qiymatlar sonini hisoblaydi. Count (*) funktsiyasi ustunlar bo'yicha hisob -kitoblarni amalga oshirmaydigan yagona agregat funktsiyasi. Bu funksiya qatorlar sonini qaytaradi (alohida ustunlar null qiymatlardan iborat bo'lishidan qat'iy nazar).

COUNT_BIG

Hisoblash funktsiyasiga o'xshash, farqi bilan BIGINT ma'lumot qiymatini qaytaradi.

SELECT bayonotida muntazam yig'ish funktsiyalaridan foydalanish kelgusi maqolada muhokama qilinadi.

Skalyar funktsiyalar

Skalyar ifodalarni tuzishda Transact-SQL skalyar funktsiyalari ishlatiladi. (Skalyar funktsiya bitta qiymat yoki qiymatlar ro'yxati bo'yicha hisob -kitoblarni bajaradi, yig'indisi esa bir necha qatordan qiymatlar guruhi bo'yicha hisob -kitoblarni bajaradi.) Skalyar funktsiyalarni quyidagicha tasniflash mumkin:

    raqamli funktsiyalar;

    sana funktsiyalari;

    simli funktsiyalar;

    tizim funktsiyalari;

    metadata funktsiyalari.

Ushbu turdagi funktsiyalar keyingi bo'limlarda muhokama qilinadi.

Raqamli funktsiyalar

Transact-SQL raqamli funktsiyalari-bu raqamli qiymatlarni o'zgartirish uchun matematik funktsiyalar. Raqamli funktsiyalar ro'yxati va ularning qisqacha tavsifi quyidagi jadvalda keltirilgan:

Transact-SQL raqamli funktsiyalari
Funktsiya Sintaksis Tavsif Foydalanish misoli
ABS ABS (n)

N sonli ifodaning mutlaq qiymatini qaytaradi (ya'ni manfiy qiymatlar musbat sifatida qaytariladi).

ABS ni tanlang (-5.320) - 5.320 ni qaytaradi ABSni tanlang (8.90) - qaytaradi 8.90

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

N qiymatining teskari kosinusi, teskari sinusi va arktangentini hisoblaydigan teskari trigonometrik funktsiyalar (ATN2 uchun n / m arktangensi hisoblab chiqiladi). Asl qiymatlar n, m va natija FLOAT ma'lumotlar turiga tegishli.

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

N qiymatining kosinus, sinus, teginish, kotangensini hisoblaydigan trigonometrik funktsiyalar. Natijada FLOAT tipidagi ma'lumotlar paydo bo'ladi.

DARAJALAR, RADIANLAR DARAJALAR (n), RADIANLAR (n)

DEGREES funktsiyasi radianlarni gradusga o'zgartiradi, RADIANS esa aksincha.

SELECT DEGREES (PI () / 4) - 45 ta SELECT COS (RADIANS (60.0)) qaytaradi - 0,5 qaytaradi

ShIFI TAVOLA (n)

Raqamni kattaroq butun songacha yaxlitlaydi.

Shiftni tanlash (-5.320) - qaytish -5 SELECT ship (8.90) - qaytarish 9

DAVLAT DAVLAT (n, p, [t])

N -sonni eng yaqin p gacha aylantiradi. Agar p musbat son bo'lsa, n ning kasr qismi yaxlitlanadi, manfiy bo'lganda esa butun qismi yaxlitlanadi. Ixtiyoriy argumentdan foydalanganda n raqami yaxlitlanmaydi, balki kesiladi (ya'ni pastga yaxlitlanadi).

SELECT ROUND (5.3208, 3) - 5.3210 SELECT ROUND qaytaradi (125.384, -1) - 130.000 SELECT ROUND qaytaradi (125.384, -1, 1) - 120.000 qaytaradi

QAT QAT (n)

Eng kichik tamsayı qiymatiga qadar yaxlitlanadi.

QATNI SELECT (5.88) - 5 qaytaradi

EXP EXP (n)

E n qiymatini hisoblab chiqadi.

Jurnal, log 10 LOG (n), LOG10 (n)

LOG (n) - n -ning tabiiy logarifmini (ya'ni, e -bazasini) hisoblab chiqadi, LOG10 (n) - n -ning o'nlik (10 -tayanch) logarifmini hisoblab chiqadi.

PI PI ()

Qaytadi π (3.1415)

QUVAT QUVAT (x, y)

X y qiymatini hisoblab chiqadi.

RAND RAND ()

FLOAT tipidagi ixtiyoriy sonni 0 dan 1 gacha bo'lgan qiymatlar oralig'ida qaytaradi.

ROWCOUNT_BIG ROWCOUNT_BIG ()

Tizim tomonidan bajarilgan oxirgi Transact-SQL bayonoti bilan ishlangan jadval satrlari sonini qaytaradi. Qaytish qiymati BIGINT turiga kiradi.

QILISH Nishon (n)

N qiymatining belgisini son sifatida qaytaradi: ijobiy bo'lsa +1, salbiy bo'lsa -1.

SQRT, Kvadrat SQRT (n), Kvadrat (n)

SQRT (n) - n ning kvadrat ildizini hisoblaydi, SQUARE (n) - n argumentining kvadratini qaytaradi.

Sana funktsiyalari

Sana funktsiyalari ifodaning sanasi yoki vaqtining tegishli qismlarini baholaydi yoki vaqt oralig'ining qiymatini qaytaradi. Transact-SQL tomonidan qo'llab-quvvatlanadigan sana funktsiyalari va ularning qisqacha tavsifi quyidagi jadvalda ko'rsatilgan:

Transact-SQL sana funktsiyalari
Funktsiya Sintaksis Tavsif Foydalanish misoli
GETDATE GETDATE ()

Tizimning joriy sanasi va vaqtini qaytaradi.

GETDATE TANLASH ()

DATEPART DATEPART (element, sana)

Element parametrida ko'rsatilgan sana qismini butun son sifatida qaytaradi.

Qaytadi 1 (yanvar) DATEPART ni tanlang (oy, "01/01/2012") - 4 ta (chorshanba) SELECT DATEPART (ish kuni, "01/02/2012")

DATENAME DATENAME (element, sana)

Element parametrida ko'rsatilgan sana qismini belgilar qatori sifatida qaytaradi.

Yanvar SELECT DATENAME (oy, "01/01/2012") qaytariladi - Chorshanba SELECT DATENAME qaytariladi (ish kuni, "01.02.2012")

DATEDIFF DATEDIFF (element, dat1, dat2)

Dat1 va dat2 sanalarining ikki qismi orasidagi farqni hisoblab chiqadi va element argumentida ko'rsatilgan birliklarda butun sonni qaytaradi.

19 (sanalar orasidagi 19 yillik interval) qaytaradi SELECT DATEDIFF (yil, "01/01/1990", "01/01/2010") - 7305 (sanalar orasidagi 7305 kunlik interval) qaytaradi SELECT DATEDIFF (kun, "01/01) 1990 "," 01/01. 2010 ")

DATEADD DATEADD (element, n, sana)

Belgilangan sanaga element argumentida ko'rsatilgan birliklarning n -sonini qo'shadi. (N qiymati ham manfiy bo'lishi mumkin.)

Joriy sanaga 3 kun qo'shing SELECT DATEADD (kun, 3, GETDATE ())

String funktsiyalari

String funktsiyalari ustun belgilarini boshqaradi, ular odatda xarakterli ma'lumotlar turiga kiradi. Transact-SQL-da qo'llab-quvvatlanadigan string funktsiyalari va ularning qisqacha tavsifi quyidagi jadvalda ko'rsatilgan:

Transact-SQL String funktsiyalari
Funktsiya Sintaksis Tavsif Foydalanish misoli
ASCII, UNICODE ASCII (char), UNICODE (char)

Belgilangan belgini mos keladigan ASCII tamsayıga o'zgartiradi.

ASCII ni tanlang ("V") - 87 UNICODE ni tanlang ("u") - 1102

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

ASCII kodini (yoki NCHAR bo'lsa Unicode) mos keladigan belgiga o'zgartiradi.

CHARA SELECT (87) - "W" NCHAR SELECT (1102) - "u"

CHARINDEX CHARINDEX (str1, str2)

Str2 str2 pastki satrining paydo bo'lishining boshlang'ich pozitsiyasini qaytaradi. Agar str2 str1 str1 pastki satrini o'z ichiga olmasa, qaytish qiymati 0 ga teng

5 ta SELECT CHARINDEX ("morf", "polimorfizm") ni qaytaradi

FARQ FARQ (str1, str2)

Str1 va str2 ikkita satrining SOUNDEX qiymatlari orasidagi farq bo'lgan 0 dan 4 gacha bo'lgan butun sonni qaytaradi. SOUNDEX usuli satr tovushini tavsiflovchi raqamni qaytaradi. Ushbu usuldan foydalanib, siz o'xshash ovozli simlarni aniqlay olasiz. Faqat ASCII belgilar uchun ishlaydi.

2 ta tanlangan farqni qaytaradi ("imlo", "aytib berish")

CHAP, O'NG SOL (str, uzunlik), O'ng (str, uzunlik)

LEFT uzunlik parametri bilan ko'rsatilgan string str ning birinchi belgilar sonini va RIGHT funktsiyasi uchun string str ning oxirgi uzunlik belgilarini qaytaradi.

DECLARE @str nvarchar (30) = "Sinxronizatsiya"; - "Synx" ni chapga qaytaradi (@str, 4) - "zats" ni o'ngga qaytaradi (@str, 5)

LEN LEN (str)

Argumentda ko'rsatilgan belgilar sonini (baytlar sonini emas) qaytaruvchi bo'sh joylarni o'z ichiga oladi.

Pastroq, tepa LOWER (str), UPPER (str)

LOWER funktsiyasi str1 ning barcha katta harflarini kichik harflarga o'zgartiradi. Kichik harflar va qatorga kiritilgan boshqa belgilar ta'sir qilmaydi. UPPER funktsiyasi str barcha kichik harflarini katta harflarga o'zgartiradi.

DECLARE @str nvarchar (30) = "Sinxronizatsiya"; - "SINKRONIZASIYA" SELECT UPPER (@str) qaytaradi - "sinxronizatsiya" qaytadi SELECT LOWER (@str)

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

LTRIM funktsiyasi str satridagi etakchi bo'shliqlarni olib tashlaydi, RTRIM mos ravishda satr oxiridagi bo'shliqlarni olib tashlaydi.

QUOTENAME QUOTENAME (char_string)

Kirish satrini haqiqiy ajratilgan identifikatorga aylantirish uchun ajratilgan Unicode qatorini qaytaradi.

DECLARE @str nvarchar (30) = "Sinxronizatsiya"; - Qaytaradi "[Sinxronizatsiya]" QUOTENAME SELECT (@str)

PATINDEX PATINDEX (% p%, expr)

Belgilangan exprda p naqshining birinchi paydo bo'lishining boshlang'ich pozitsiyasini qaytaradi yoki agar berilgan naqsh topilmasa nol.

4 ta SELECT PATINDEX qaytaradi ("% chro%", "Sinxronizatsiya")

O'zgartirish O'zgartirish (str1, str2, str3)

Str1 -dagi str2 ning barcha ko'rinishini str3 bilan almashtiradi.

"Sinxronizatsiya" ni qaytaradi SELECT REPLACE ("Sinxronizatsiya", "Sinxronizatsiya", "Sinxronizatsiya")

REPLICATE REPLICATE (str, i)

Str i qatorini takrorlaydi.

"ABaBaBaBaB" ni qaytaradi, SELECT REPLICATE ("aB", 5)

TERISH REVERSE (str)

Str str teskari tartibda chiqaradi.

"Yicazinorkhnis" ni qaytaradi, REVERS SELECT ("Sinxronizatsiya")

SOUNDEX SOUNDEX (str)

Ikki satrning o'xshashligini aniqlash uchun ishlatilgan to'rtta belgidan iborat tovushni qaytaradi. Faqat ASCII belgilar uchun ishlaydi.

BOSHLIK BOSHLIK (uzunlik)

Uzunlik parametrida ko'rsatilgan uzunlikdagi bo'shliqlar qatorini qaytaradi. REPLICATE analogi ("", uzunlik).

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

Belgilangan suzuvchi nuqta f ifodasini mag'lubiyatga o'zgartiradi, bu erda len-mag'lubiyat uzunligi, shu jumladan kasr, belgi, raqamlar va bo'shliqlar (standart-10), d-qaytariladigan kasrlar soni.

"3.14" ni qaytarish SELECT STR (3.1415, 4, 2)

STUFF STUFF (str1, a, uzunlik, str2)

Str1 uzunlikdagi belgilarni a pozitsiyasidan boshlab olib tashlaydi va ularning o'rniga str2 qatorini qo'shadi.

SELECT STUFF kitobidagi eslatma ("Daftar", 5, 0, "a") - Qo'llanma SELECT STUFF ("Daftar", 1, 4, "Qo'l")

SUBSTRING SUBSTRING (str1, a, uzunlik)

Str str satridan, a pozitsiyasidan boshlab, uzunlikdagi pastki satr.

Tizim funktsiyalari

Transact-SQL tizimining funktsiyalari ma'lumotlar bazasi ob'ektlari haqida keng ma'lumot beradi. Ko'pgina tizim funktsiyalari har bir ma'lumotlar bazasi obyekti yaratilganda unga berilgan ichki raqamli identifikatordan (ID) foydalanadi. Bu identifikator orqali tizim har bir ma'lumotlar bazasi ob'ektini o'ziga xos tarzda aniqlay oladi.

Quyidagi jadvalda tizimning eng muhim funktsiyalari va qisqacha tavsifi keltirilgan.

Transact-SQL tizimining funktsiyalari
Funktsiya Sintaksis Tavsif Foydalanish misoli
CAST CAST (w AS turi [(uzunlik)]

Agar mavjud bo'lsa, w ifodasini ko'rsatilgan ma'lumotlar turiga o'zgartiradi. W argumenti har qanday haqiqiy ifoda bo'lishi mumkin.

3 ta SELECT CAST qaytariladi (3.1258 AS INT)

COALESCE COALESCE (a1, a2)

A1, a2, .... ifodalar ro'yxatidan birinchi nol bo'lmagan ifoda qiymatini qaytaradi.

COL_LENGTH COL_LENGTH (obj, col)

Ma'lumotlar bazasi ob'ektining ustun ustunining uzunligini qaytaradi (jadval yoki ko'rinish) obj.

Qaytadi 4 SELECT COL_LENGTH ("Xodim", "Id")

QABUL QILISH KONVERT ([[uzunlik]], w)

CAST funktsiyasiga teng, lekin argumentlar boshqacha ko'rsatiladi. U har qanday turdagi ma'lumotlar bilan ishlatilishi mumkin.

CURRENT_TIMESTAMP CURRENT_TIMESTAMP

Joriy sana va vaqtni qaytaradi.

CURRENT_USER CURRENT_USER

Joriy foydalanuvchining ismini qaytaradi.

DATALENGTH DATALENGTH (z)

Z ifodasi egallagan baytlar sonini qaytaradi.

Bu so'rov har bir maydon uzunligini SELECT DATALENGTH (FirstName) FROM xodimidan qaytaradi

GETANSINULL GETANSINULL ("dbname")

Agar dbname ma'lumotlar bazasida null qiymatlardan foydalanish ANSI SQL standartiga javob bersa, 1 qaytaradi.

ISNULL ISNULL (expr, qiymat)

NULL bo'lmasa, expr qiymatini qaytaradi; aks holda, qiymat qaytariladi.

ISNUMERIK ISNUMERIC (expr)

Expr haqiqiy raqam turi ekanligini aniqlaydi.

NEWID NEWID ()

UNIQUEIDENTIFIER ma'lumotlar turining qiymatlarini saqlash uchun noyob 16 baytli ikkilik qatorni yaratadi.

NEWSEQUENTIALID NEWSEQUENTIALID ()

Belgilangan kompyuterda ilgari ushbu funktsiya tomonidan yaratilgan boshqa GUIDdan kattaroq GUID yaratadi. (Bu funksiya faqat ustun uchun sukut sifatida ishlatilishi mumkin.)

NULLIF NULLIF (1 -chi, 2 -chi)

Expr1 va expr2 qiymatlari bir xil bo'lsa, null qaytaradi.

Loyihadan Number = "p1" SELECT NULLIF (Number, "p1") bo'lgan loyiha uchun so'rov NULL qaytaradi.

XIZMAT MULKI XIZMAT MULKI (mulk nomi)

Ma'lumotlar bazasi serverining xususiyatlari haqida ma'lumot oladi.

SYSTEM_USER SYSTEM_USER

Joriy foydalanuvchining identifikatorini qaytaradi.

FOYDALANUVCHI IDSI FOYDALANUVCHI IDSI ()

Foydalanuvchi identifikatori foydalanuvchi nomini qaytaradi. Agar foydalanuvchi ko'rsatilmagan bo'lsa, joriy foydalanuvchi identifikatori qaytariladi.

USER_NAME USER_NAME ()

Belgilangan identifikator bilan foydalanuvchi nomini qaytaradi. Agar identifikator ko'rsatilmagan bo'lsa, joriy foydalanuvchi nomi qaytariladi.

Metadata funktsiyalari

Asosan, metadata funktsiyalari belgilangan ma'lumotlar bazasi va ma'lumotlar bazasi ob'ektlari haqidagi ma'lumotlarni qaytaradi. Quyidagi jadvalda metama'lumotlarning eng muhim funktsiyalari va qisqacha tavsifi keltirilgan:

Transact-SQL metadata funktsiyalari
Funktsiya Sintaksis Tavsif Foydalanish misoli
COL_NAME COL_NAME (tab_id, col_id)

Tab_id bilan jadvalning ko'rsatilgan col_id bilan ustun nomini qaytaradi.

"Familiya" ustun nomini qaytaradi SELECT COL_NAME (OBJECT_ID ("Xodim"), 3)

SUTUNCHA MULKI COLUMNPROPERTY (id, col, mulk)

Belgilangan ustun haqidagi ma'lumotlarni qaytaradi.

Xodimlar jadvalining Id ustuni uchun PRECISION xususiyatining qiymatini qaytaradi.

Ma'lumotlar bazasi DATABASEPROPERTY (ma'lumotlar bazasi, mulk)

Ma'lumotlar bazasi ma'lumotlar bazasining mulkiy xususiyatini qaytaradi.

IsNullConcat xususiyatining qiymatini qaytaradi - SampleDb ma'lumotlar bazasi uchun SELECT DATABASEPROPERTY ("SampleDb", "IsNullConcat")

DB_ID DB_ID ()

Ma'lumotlar bazasi identifikatorini qaytaradi db_name. Agar ma'lumotlar bazasi nomi ko'rsatilmagan bo'lsa, joriy ma'lumotlar bazasining identifikatori qaytariladi.

DB_NAME DB_NAME ()

Ma'lumotlar bazasi nomini db_id bilan qaytaradi. Agar identifikator ko'rsatilmagan bo'lsa, joriy ma'lumotlar bazasi nomi qaytariladi.

INDEX_COL INDEX_COL (jadval, i, yo'q)

Jadval jadvalining indekslangan ustun nomini qaytaradi. Ustun i indeks identifikatori i va bu indeksdagi ustunning raqami bilan ko'rsatiladi.

INDEXPROPERTY INDEXPROPERTY (obj_id, index_name, xususiyat)

Belgilangan jadval identifikatsiya raqami, indeks yoki statistikaning nomi va xususiyat nomiga nomlangan indeks yoki statistikaning xususiyatlarini qaytaradi.

OBJECT_NAME OBJECT_NAME (obj_id)

Obj_id identifikatori bilan ma'lumotlar bazasi ob'ektining nomini qaytaradi.

OBJECT_NAME ni tanlang (245575913);

OBJECT_ID OBJECT_ID (obj_name)

Ma'lumotlar bazasining obj_name ob'ekt identifikatorini qaytaradi.

Qaytadi 245575913 - Xodimlar jadvalining identifikatori SELECT OBJECT_ID ("Xodim")

OBJECTP MULKI OBJECTPROPERTY (obj_id, mulk)

Joriy ma'lumotlar bazasidan ob'ektlar haqidagi ma'lumotlarni qaytaradi.

Salom blog saytining aziz o'quvchilari. Bugun men SQL tili, xususan matnni qayta ishlash funktsiyalari haqida gapirishni istardim. Veb -sayt yaratish va boshqarish uchun ko'pincha SQL tilini bilish shart emas. Kontentni boshqarish tizimlari sayt tarkibini so'rovlar yozmasdan tahrirlash imkonini beradi. Lekin hech bo'lmaganda tuzilgan so'rovlar tili bilan tanishish sizga saytingiz ma'lumotlar bazasidagi ma'lumotlarni o'zgartirish va boshqarishni sezilarli darajada tezlashtirishga yordam beradi.

Men tez -tez vazifalarga duch kelaman: ma'lumotlar bazasining matn maydonlaridan matnning bir qismini olib tashlash, satrli ma'lumotlarni yoki matn bilan bog'liq boshqa narsalarni birlashtirish. Bularning barchasini saytning boshqaruv panellari orqali qilish juda noqulay va zerikarli. Bularning barchasini bir necha soniya ichida bajaradigan ma'lumotlar bazasi so'rovini yozish ancha oson.

Xo'sh, boshlaylik ...

SQL tilida ramziy funktsiyalar

Keling, eng oddiyidan tartibda boshlaylik. Birinchidan, matn belgilarining ASCII kodini aniqlash uchun ishlatiladigan ASCII string funktsiyasini ko'rib chiqaylik:

butun son ASCII(str tor)

Funktsiya butun sonli qiymatni qaytaradi - str satrining birinchi chap belgisining ASCII kodi. Agar str string bo'sh bo'lsa, str satr bo'lmasa 0 va NULL qaytaradi.

ASCII ni tanlang ("t");
Lavozimi: 116
ASCII ni tanlang ("test");
Lavozimi: 116
ASCII ni tanlang (1);
Lavozim: 49

butun son ORD(str tor)

Agar str satrining birinchi chap belgisi ko'p baytli bo'lsa, u o'z kodini quyidagi formatda qaytaradi: ((birinchi baytli ASCII kodi) * 256 + (ikkinchi baytli ASCII kodi)) [ * 256 + uchinchi baytli ASCII kodi ...]. Agar str satrining birinchi chap belgisi ko'p baytli bo'lmasa, u ASCII funktsiyasi sifatida ishlaydi - uning ASCII kodini qaytaradi.

ORD SELECT ("test");
Lavozimi: 116

ASCII funktsiyasi bilan chambarchas bog'liq bo'lgan CHAR funktsiyasi buning aksini qiladi:

tor CHAR(int butun son, ...)

CHAR funktsiyasi ASCII kodlariga asoslangan belgilar qatorini qaytaradi. Agar qiymatlar orasida NULL topilsa, u o'tkazib yuboriladi.

CHARA SELECT (116, "101", 115, "116");
Natija: "test"

Stringni birlashtirish uchun SQL funktsiyalari

Xususiyatlarning eng mashhur toifalaridan biri. Axir, ko'pincha saytlar bazasi jadvallarining bir nechta maydonlarining qiymatlarini birlashtirish kerak bo'ladi. SQL tilida bir vaqtning o'zida bir nechta funktsiyalar mavjud simlarni birlashtirish.

CONCAT funktsiyasi:

tor CONCAT(str1 tor, str2 tor,...)

Funktsiya argumentlarni birlashtirish orqali yaratilgan qatorni qaytaradi. Ikkita argumentni ko'rsatish mumkin. Agar argumentlardan biri NULL bo'lsa, qaytarilgan natija NULL bo'ladi. Raqamli qiymatlar satrlarga aylantiriladi.

CONCAT SELECT ("Salom", "", "dunyo", "!");
Natija: "Salom dunyo!"
CONCAT SELECT ("Salom", NULL, "dunyo", "!");
Natija: NULL
CONCAT SELECT ("Number pi", "=", 3.14);
Natija: "raqam pi = 3.14"

Misollardan ko'rinib turibdiki, satrlar ajratgichlarsiz birlashtirilgan. Birinchi misolda so'zlarni ajratish uchun siz bo'sh joyni argument sifatida ishlatishingiz kerak. Agar ko'proq so'zlar bo'lsa, har safar bo'sh joy kiritish juda qulay bo'lmaydi.

Bunday holatlar uchun CONCAT_WS funktsiyasi mavjud:

tor CONCAT_WS(ajratuvchi tor, str1 tor, str2 tor,...)

Funktsiya CONCAT funktsiyasi kabi qatorlarni birlashtiradi, lekin argumentlar orasiga ajratuvchi qo'yadi. Agar ajratuvchi NULL bo'lsa, natija NULL bo'ladi. NULL string argumentlari o'tkazib yuboriladi.

CONCAT_WS -ni tanlang ("", "Ivanov", "Ivan", "Ivanovich");
Natija: "Ivanov Ivan Ivanovich"
CONCAT_WS -ni tanlang (NULL, "Ivanov", "Ivan", "Ivanovich");
Natija: NULL
CONCAT_WS ni tanlang ("", "Ivanov", NULL, "Ivan", "Ivanovich");
Natija: "" Ivanov Ivan Ivanovich "

Ajratuvchi bilan ajratilishi kerak bo'lgan ko'p sonli satrlar birlashganda, CONCAT_WS funktsiyasi CONCAT funktsiyasidan ancha qulayroqdir.

Ba'zida belgini takrorlash orqali simni ma'lum songacha cho'zish kerak bo'ladi. Bu ham mag'lubiyatning bir xil birikmasi. Buning uchun siz funktsiyalardan foydalanishingiz mumkin LPAD va RPAD... Funktsiyalar quyidagi sintaksisga ega:

tor LPAD(str tor, len butun son, padstr tor)
tor RPAD(str tor, len butun son, padstr tor)

LPAD funktsiyasi chapga to'ldirilgan str, padstr bilan uzunlik uzunligini qaytaradi. RPAD funktsiyasi xuddi shunday qiladi, faqat cho'zilish o'ng tomonda sodir bo'ladi.

LPAD SELECT ("test", 10, ".");
Natija: ...... test
RPADni tanlash ("test", 10, ".");
Natija: test ......

Ushbu funktsiyalarda siz e'tibor berishingiz kerak parametr len, bu ko'rsatiladigan belgilar sonini cheklaydi. Shuning uchun, str satrining uzunligi len parametridan katta bo'lsa, satr kesiladi:

LPAD SELECT ("test", 3, ".");
Natija: tes

SQL so'rovlarida satr uzunligini aniqlash

SQL tilidagi satrdagi belgilar sonini aniqlash uchun LENGTH funktsiyasi javobgardir - satr uzunligi:

butun son UZOQLIK(str tor)

Funktsiya str belgisiga teng bo'lgan butun sonni qaytaradi.

Uzunlikni tanlash ("test");
Natija: 4

Agar ko'p baytli kodlash ishlatilsa, LENGTH funktsiyasi to'g'ri natijani bermaydi. Masalan, agar unicode kodlash o'rnatilgan bo'lsa, so'rov:

Uzunlikni tanlash ("test");

qaytadi 8. Qaysi birini osongina ko'rishingiz mumkin, bu haqiqiy belgilar sonidan ikki baravar ko'p. Bunday holda, siz CHAR_LENGTH funktsiyasidan foydalanishingiz kerak:

butun son CHAR_LENGTH(str tor)

Funktsiya ham qaytadi chiziq uzunligi str va qo'llab -quvvatlaydi ko'p baytli belgilar.

Masalan:

CHAR_LENGTH ni tanlang ("test");
Natija: 4

Sql yordamida satrda pastki qatorni qidiring

SQL tilidagi satrda pastki satr o'rnini hisoblash uchun bir nechta funktsiyalar mavjud. Biz ko'rib chiqadigan birinchi narsa POSITION funktsiyasi:

butun sonPOSITION(substr tor IN str tor)

Str str satrida substring substrining birinchi paydo bo'lishining pozitsiya raqamini qaytaradi va agar pastki satr topilmasa 0 qaytaradi. POSITION funktsiyasi ko'p baytli belgilar bilan ishlay oladi.

POSITIONNI TANLASH ("cc" IN "abcdcde");
Natija: 3
MAVZUNI TANLASH ("xy" IN "abcdcde");
Natija: 0

Quyidagi LOCATE funktsiyasi ma'lum bir pozitsiyada pastki qatorni qidirishni boshlashga imkon beradi:

butun son JOYLASH(substr tor, str tor, pos butun son)

Str pozitsiyasidan boshlab, str str ichida substring substrining birinchi paydo bo'lishi o'rnini qaytaradi. Agar pos parametri ko'rsatilmagan bo'lsa, u holda qidiruv satr boshidan amalga oshiriladi. Agar substr topilmasa, u 0 qaytaradi. Ko'p baytli belgilarni qo'llab -quvvatlaydi.

Joyni tanlash ("cd", "abcdcdde", 5);
Natija: 5
Joyni tanlash ("cd", "abcdcdde");
Natija: 3

INSTR funktsiyasi POSITION va LOCATE funktsiyalariga o'xshaydi:

butun son INSTR(str tor, substr tor)

String str -da substring substrining birinchi paydo bo'lishi o'rnini va yuqoridagi funktsiyani qaytaradi. POSITION va LOCATE funktsiyalaridan farqi shundaki, argumentlar almashtiriladi.

Birinchidan, biz bir vaqtning o'zida ikkita chap va o'ng funktsiyalarni ko'rib chiqamiz, ular o'z harakatlarida o'xshash:

tor SOL(str tor, len butun son)
tor O'ng(str tor, len butun son)

LEFT funktsiyasi string str dan birinchi belgilarning lenini qaytaradi va RIGHT funktsiyasi oxirgi sonlarning bir xil sonini qaytaradi. Ko'p baytli belgilarni qo'llab -quvvatlaydi.

Chapni tanlash ("Moskva", 3);
Natija: Mos
O'ngni tanlash ("Moskva", 3);
Natija: kva

tor SUBSTRING(str tor, pos butun son, len butun son)
tor MID(str tor, pos butun son, len butun son)

Vazifalar pos pozitsiyasidan len uzunlikdagi str strining pastki qatorini olish imkonini beradi. Agar len parametri ko'rsatilmagan bo'lsa, pos pozitsiyasidan boshlangan butun pastki satr qaytariladi.

SUBSTRING SELECT ("Moskva - Rossiya poytaxti", 4, 6);
Natija: Moskva
SUBSTRING SELECT ("Moskva - Rossiya poytaxti", 4);
Natija: Moskva - Rossiyaning poytaxti

Men MID funktsiyasi bilan misol keltirmayman, chunki natijalar o'xshash bo'ladi.

Qiziqarli SUBSTRING_INDEX funktsiyasi:

tor SUBSTRING_INDEX(str tor, delim tor, sanash butun son)

Funktsiya pozitsiyalar sonini ajratishdan keyin belgilarni olib tashlash orqali olingan str pastki satrini qaytaradi. Hisoblash parametri ham ijobiy, ham salbiy bo'lishi mumkin. Agar hisob ijobiy bo'lsa, ajratuvchi o'rni chapdan sanaladi va ajratgichning o'ng tarafidagi belgilar o'chiriladi. Agar hisoblash manfiy bo'lsa, ajratuvchi o'rni o'ng tomonda sanaladi va ajratuvchi chapdagi belgilar o'chiriladi. Ehtimol, tavsif juda chalkash bo'lib chiqdi, lekin misollar bilan u aniqroq bo'ladi.

SUBSTRING_INDEX ni tanlang ("www.mysql.ru", ".", 1);
Natija: www

Bu misolda, funktsiya "www.mysql.ru" satrida nuqta belgisining birinchi marta paydo bo'lishini topadi va unga ergashgan barcha belgilarni, shu jumladan ajratuvchining o'zi ham o'chiriladi.

SUBSTRING_INDEX ni tanlang ("www.mysql.ru", ".", 2);
Natija: www.mysql

Bu erda funktsiya nuqta ikkinchi marta paydo bo'lishini qidiradi, uning o'ng tomonidagi barcha belgilarni olib tashlaydi va natijada paydo bo'lgan pastki qatorni qaytaradi. Va hisoblash parametrining salbiy qiymati bo'lgan yana bir misol:

SUBSTRING_INDEX ni tanlang ("www.mysql.ru", ".", -2);
Natija: mysql.ru

Bu misolda SUBSTRING_INDEX funktsiyasi o'ngdan sanash orqali ikkinchi nuqtani qidiradi, chapdagi belgilarni olib tashlaydi va natijada paydo bo'ladigan pastki qatorni chiqaradi.

Ipdan bo'sh joylarni olib tashlash

Stringning boshidan va oxiridan qo'shimcha bo'sh joylarni olib tashlash uchun SQLda uchta funktsiya mavjud.

LTRIM funktsiyasi:

tor LTRIM(str tor)

Str boshidan bo'sh joylarni olib tashlaydi va natijani qaytaradi.

RTRIM funktsiyasi:

tor RTRIM(str tor)

Shuningdek, str dan bo'sh joylarni olib tashlaydi, faqat oxiridan. Ikkala funktsiya ham ko'p baytli belgilarni qo'llab -quvvatlaydi.

LTRIMni tanlash ("matn");
Natija: "matn"
RTRIMni tanlang ("matn");
Natija: "matn"

Uchinchi TRIM funktsiyasi satr boshidan va oxiridan bo'sh joylarni darhol olib tashlashga imkon beradi:

tor TRIM([ tor FROM] str tor)

Str parametri talab qilinadi, qolgan parametrlar ixtiyoriy. Agar faqat bitta str parametr ko'rsatilgan bo'lsa, u bir vaqtning o'zida satrning boshidan va oxiridan bo'sh joylarni olib tashlab, str stringini qaytaradi.

TRIM SELECT ("matn");
Natija: "matn"

Remstr parametri yordamida siz satr boshidan va oxiridan olib tashlanadigan belgilar yoki pastki qatorlarni belgilashingiz mumkin. BOTH, LEADING, TRAILING boshqaruv parametrlaridan foydalanib, belgilar qaerdan olib tashlanishini belgilashingiz mumkin:

  • BOTH - satr boshidan va oxiridan remstr pastki satrini olib tashlaydi;
  • LEADING - satr boshidan remstrni olib tashlaydi;
  • TRAILING - satr oxiridan remstrni olib tashlaydi.

TRIMni tanlang (ikkalasi ham va "matndan");
Natija: "matn"
TRIMNI SEVISH (LEADING) va "textaa" dan "FROM");
Natija: "textaa"
TRIMni tanlang (TRAILING) va "aaatext" dan);
Natija: "aaatext"

SPACE funktsiyasi ma'lum miqdordagi bo'shliqlardan iborat qatorni olish imkonini beradi:

tor BOSHLIK(n butun son)

N bo'shliqdan iborat qatorni qaytaradi.

REPLACE funktsiyasi uchun kerak satrda berilgan belgilar o'rnini bosadi:

tor O'zgartirish(str tor, dan_str tor, to_str tor)

Funksiya str dan to_str bilan barcha substringsni almashtiradi va natijani qaytaradi. Ko'p baytli belgilarni qo'llab -quvvatlaydi.

O'zgartirishni tanlash ("pastki qatorni almashtirish", "pastki satr", "matn")
Natija: "matnni almashtirish"

REPEAT funktsiyasi:

tor TEKRARLASH(str tor, sanash butun son)

Funktsiya str sonini takrorlashdan iborat qatorni qaytaradi. Ko'p baytli belgilarni qo'llab -quvvatlaydi.

Takrorlashni tanlang ("w", 3);
Natija: "www"

REVERSE funktsiyasi qatorni teskari yo'naltiradi:

tor TERISH(str tor)

Str -dagi barcha belgilarni boshidan oxirigacha almashtiradi va natijani qaytaradi. Ko'p baytli belgilarni qo'llab -quvvatlaydi.

REVERSE -ni tanlang ("matn");
Natija: "tsket"

Satrga substring kiritish uchun INSERT funktsiyasi:

torKIRITMOQ(str tor, pos butun son, len butun son, newstr tor)

Newstr pastki satrini pos pozitsiyasidagi str ga kiritish natijasida hosil bo'lgan qatorni qaytaradi. Len parametri pos pozitsiyasidan boshlab str dan nechta belgi olib tashlanishini ko'rsatadi. Ko'p baytli belgilarni qo'llab -quvvatlaydi.

INSERT ni tanlang ("matn", 2, 5, "MySQL");
Natija: "tMySQL"
"SELECT INSERT (" matn ", 2, 0," MySQL ");
Natija: "tMySQLext"
INSERT ni tanlang ("matn kiritish", 2, 7, "MySQL");
Natija: "INSERT SELECT (" matn kiritish ", 2, 7," MySQL ");"

Agar siz to'satdan matndagi barcha katta harflarni katta harflar bilan almashtirishingiz kerak bo'lsa, siz ikkita funktsiyadan birini ishlatishingiz mumkin:

tor LCASE(str tor) va tor Pastroq(str tor)

Ikkala funktsiya ham str harfidagi katta harflarni almashtiradi va natijani qaytaradi. Ikkalasi ham ko'p baytli belgilarni qo'llab -quvvatlaydi.

SELCET LOWER ("ABVGDeZhZiKL");
Natija: "abvgdezhzikl"

Agar, aksincha, katta harflarni katta harflar bilan almashtirish zarur bo'lsa, unda ikkita funktsiyadan birini ham ishlatish mumkin:

tor UCASE(str tor) va tor Yuqori (str tor)

Vazifalar str satrini qaytaradi, barcha katta harflarni katta harflar bilan almashtiradi. Shuningdek, ko'p baytli belgilarni qo'llab -quvvatlaydi.
Misol:

YUQORI TANLASH ("Abvgdezhz");
Natija: "ABVGDEZHZ"

SQL tilida ushbu maqolada muhokama qilinganidan ko'ra biroz ko'proq string funktsiyalari mavjud. Ammo bu erda muhokama qilingan ko'pgina funktsiyalar kamdan -kam ishlatilgani uchun men ularni ko'rib chiqishni tugataman. Keyingi maqolalarda men SQL string funktsiyalaridan foydalanishning haqiqiy amaliy misollarini ko'rib chiqishga harakat qilaman. Shunday qilib, blog yangilanishlariga obuna bo'lishni unutmang. Keyingi safargacha!

Bu erda BOL -dan olingan string funktsiyalarining to'liq ro'yxati:

Natija - 11. Ular qanday harflar ekanligini bilish uchun biz ma'lum ASCII kodi yordamida belgini qaytaradigan CHAR funktsiyasidan foydalanishimiz mumkin (0 dan 255 gacha):

Va bu erda, masalan, siz barcha alifbo belgilar kodlari jadvalini olishingiz mumkin:

CHARni tanlash (ASCII ("a") + raqam-1) harfi, ASCII ("a") + raqam-1 FROM (SELECT 5 * 5 * (a-1) + 5 * (b-1) + c AS num (SELECT 1 a UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5) x CROSS JOIN (SELECT 1 b UNION ALL SELECT 2 UNION ALL SELECT 3 UNION SELECT 4 UNION ALL SELECT 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 ASCII ("a") + ASCII ("a") VA ASCII ("z") QAYERDA.

Raqamlar ketma -ketligi haqida hali bilmaganlar uchun men tegishli maqolaga murojaat qilaman.

Ma'lumki, kichik va katta harflarning kodlari boshqacha. Shuning uchun, so'rovni qayta yozmasdan to'liq to'plamni olish uchun yuqoridagi kodga o'xshashini qo'shish kifoya:

O'ylaymanki, agar kerak bo'lsa, bu xatni jadvalga qo'shish qiyin bo'lmaydi.

String ifodasida kerakli pastki satrni topish muammosini ko'rib chiqing. Buning uchun ikkita funktsiyadan foydalanish mumkin - CHARINDEX va PATINDEX... Ular ikkalasi ham mag'lubiyatning boshlang'ich pozitsiyasini (pastki satrning birinchi belgisining pozitsiyasini) qaytaradi. CHARINDEX funksiyasi sintaksisga ega:

CHARINDEX ( search_express, string_express[, start_pozitsiyasi])

Bu erda ixtiyoriy tamsayı parametri start_pozitsiyasi qidiruv amalga oshiriladigan satr ifodasidagi pozitsiyani belgilaydi search_express... Agar bu parametr qoldirilsa, qidirish boshidan amalga oshiriladi string_express... Masalan, so'rov

Shuni ta'kidlash kerakki, agar kerakli pastki satr yoki satr ifodasi NULL bo'lsa, funktsiyaning natijasi ham NULL bo'ladi.

Quyidagi misol "Kaliforniya" kema nomidagi "a" belgisining birinchi va ikkinchi holatlarini aniqlaydi.

Va bu erda, masalan, uchta belgidan iborat ketma -ketlikdagi kemalarning nomlarini qanday topish mumkin, birinchi va oxirgi "e":

Bug 'xonasi SOL funktsiya O'ng satr ifodasining o'ng tomonida ko'rsatilgan belgilar sonini qaytaradi:

O'ng (<mag'lubiyat ifodasi>,<belgilar soni>)

Masalan, xuddi shu harf bilan boshlanadigan va tugaydigan kema nomlarini qanday aniqlash mumkin:

Bu erda biz sinf nomini va kema nomini bo'sh joy bilan ajratamiz. Bundan tashqari, funktsiyaga argument sifatida butun konstruktsiyani takrorlamaslik uchun biz pastki so'rovdan foydalanamiz. Natijada shunday bo'ladi:

Bu holatni bartaraf etish uchun siz boshqa foydali funktsiyadan foydalanishingiz mumkin LEN (<mag'lubiyat ifodasi>) satrdagi belgilar sonini qaytaradi. Keling, belgilar soni bir nechta bo'lsa, o'zimizni cheklaylik:

Funktsiya REPLICATE o'ngdagi beshta bo'sh joy bilan doimiy "abcde" ni to'ldirish, bu funktsiya tomonidan hisobga olinmaydi LEN, - har ikkala holatda ham 5 ga olamiz.
Funktsiya DATALENGTH o'zgaruvchining tasviridagi baytlar sonini qaytaradi va bizga CHAR va VARCHAR o'rtasidagi farqni ko'rsatadi. DATALENGTH bizga CHAR uchun 12 va VARCHAR uchun 10 beradi.
Kutilganidek, DATALENGTH VARCHAR o'zgaruvchisi uchun o'zgaruvchining haqiqiy uzunligini qaytardi. Lekin nima uchun CHAR tipidagi o'zgaruvchi uchun natija 12 ga teng? Gap shundaki, CHAR - bu tur belgilangan uzunlik... Agar o'zgaruvchining qiymati uning uzunligidan kichik bo'lsa va biz uzunlikni CHAR (12) deb e'lon qilgan bo'lsak, u holda o'zgaruvchining qiymati oxirgi bo'shliqlarni qo'shib kerakli uzunlikka "hizalanadi".

Saytda siz buyurtma berishni xohlagan vazifalar mavjud (maksimalni toping va hokazo) raqamli tartibda matn formatida berilgan qiymatlar. Masalan, samolyotdagi o'rindiq raqami ("2d") yoki CD tezligi ("24x"). Muammo shundaki, matn shunday tartiblangan (ko'tarilgan)

Agar joylarni ketma -ket ko'tarilish tartibida joylashtirish zarur bo'lsa, tartib quyidagicha bo'lishi kerak

Agar biz faqat shu bilan chegaralanib qolsak, biz bunga erishamiz

Saralash qoladi

Bugun men foydalanishning oddiy misollarini ko'rib chiqishni taklif qilaman Transact-SQL string funktsiyalari va ba'zi funktsiyalarning tavsifi va misollari emas, balki ularning kombinatsiyasi, ya'ni. ularni qanday qilib bir -biriga joylashtirish mumkin, chunki ko'p vazifalarni bajarish uchun standart funktsiyalar etarli emas va siz ularni birgalikda ishlatishingiz kerak. Shunday qilib, men sizga bunday so'rovlarni yozishning bir nechta oddiy misollarini ko'rsatmoqchiman.

Biz allaqachon SQL string funktsiyalarini ko'rib chiqdik, lekin bu tilni turli xil DBMS-larda amalga oshirish turlicha bo'lgani uchun, masalan, ba'zi funktsiyalar Transact-SQLda emas, balki PL / PGSql-da, va oxirgi marta biz string funktsiyalarini ko'rib chiqdik. Bu plpgsql-da ishlatilishi mumkin va shuning uchun bugun biz Transact-SQL haqida alohida gaplashamiz.

SUBSTRING, CHARINDEX va LENni qanday birlashtirish mumkin

Va shuning uchun, masalan, siz uning bir qismini ma'lum bir mezon bo'yicha mag'lubiyatdan qidirishingiz va kesib olishingiz kerak, va faqat shu turdagi qismni emas, balki dinamik ravishda, ya'ni. qidirish satri har bir satr uchun har xil bo'ladi. Misollar Management Studio SQL Server 2008 da yoziladi.

Buning uchun biz quyidagi funktsiyalarni ishlatamiz:

  • SUBSTRING(str, start, len) - bu funksiya mag'lubiyatning bir qismini boshqa qatordan kesib tashlaydi. Uch parametrga ega 1. Bu satrning o'zi; 2. Kesishni boshlash kerak bo'lgan boshlang'ich pozitsiyasi; 3. Belgilar soni, nechta kesish kerak.
  • CHARINDEX(str1, str2) - str2da str1 ni qidiradi va agar shunday satr topilsa birinchi belgining tartibini qaytaradi. Uchinchi ixtiyoriy parametr mavjud, uning yordamida qidiruvni qaysi tomondan boshlash kerakligini belgilash mumkin.
  • LEN(str1) - ipning uzunligi, ya'ni. Belgilar.

Ko'rib turganingizdek, bu erda men o'zgaruvchilar deklaratsiyasidan foydalanardim va siz o'z maydonlaringizni so'rovda o'zgaruvchilar o'rniga qo'yishingiz mumkin. Mana kodning o'zi:

@Rezult -ni varchar deb e'lon qiling (10) - manba satri @ str1 -ni varchar (100) deb e'lon qiling - @ str2 -ni varchar (10) deb belgilang set @ str1 = "Boshqa satrni qidirish uchun satr satrini sinab ko'ring" set @ str2 = "string" set @ rezult = substring ( @ str1, CHARINDEX ( @ str2, @ str1), LEN ( @ str2)) @rezult -ni tanlang

Gap shundaki, len funktsiyasidan foydalanib, biz nechta belgini kesish kerakligini bilib olamiz va charindex kesishni boshlash uchun pozitsiyani o'rnatadi va shunga ko'ra, substring o'zi tanlaydi.

Chap, O'ng va LENni qanday birlashtirish mumkin

Aytaylik, siz satrdagi dastlabki bir nechta belgilarni olishingiz yoki biror narsaning mavjudligini tekshirishingiz kerak, masalan, ba'zi raqamlar va uning uzunligi tabiiy ravishda farq qiladi (bu sinov namunasi, albatta) .

  • Chapda(str, kol) - funktsiya chapdan belgilangan belgilar sonini kesib tashlaydi, ikkita parametrga ega, birinchisi - satr, ikkinchisi - mos ravishda belgilar soni;
  • To'g'ri(str, kol) - funktsiya ko'rsatilgan belgilar sonini o'ngdan kesib tashlaydi, parametrlar bir xil.

Endi biz jadvalga nisbatan oddiy so'rovlardan foydalanamiz

Birinchidan, test_table yarataylik:

Jadval yarating (IDENTITY (1,1) NULL emas, (18, 0) NULL, (50) NULL, PAD_INDEX = O'CHIRISH, STATISTICS_NORECOMPUTE = O'CHIRISH, IGNORE_DUP_KEY = YOQI, ALLOWCI_OCHIQ) ) YO'LDA

Keling, uni test ma'lumotlari bilan to'ldiramiz va quyidagi so'rovlarni yozamiz:

Siz tushunganingizdek, birinchi so'rov - bu barcha qatorlarning tanlovi (SQL asoslari - tanlash), ikkinchisi - bizning funktsiyalarimizning to'g'ridan -to'g'ri kombinatsiyasi, bu erda kod:

Test_table -dan * ni tanlang, test_table -dan str sifatida chapni (matn, LEN (raqam)) tanlang

Va agar bu raqamlar o'ngda bo'lsa, biz funktsiyani ishlatardik O'ng.

Rtrim, Ltrim, Yuqori va Pastdan birgalikda foydalanish

Agar sizda boshida va oxirida bo'sh joylar bor deb faraz qilsangiz va siz, albatta, ulardan qutulasiz va masalan, ularni shunday qilasizki, bu satrdagi birinchi harf katta harf bilan yoziladi.

  • Qisqartirish(str) - o'ngdagi bo'shliqlarni olib tashlaydi;
  • Ltrim(str) - chapdagi bo'shliqlarni olib tashlaydi;
  • Yuqori(str) - satrni katta harfga o'zgartiradi;
  • Pastki(str) - satrni kichik harflarga o'zgartiradi.

Ko'rib turganingizdek, biz bu erda ham tuzatish uchun ishlatilganmiz Substring va Len... So'rovning ma'nosi oddiy, biz bo'sh joyni o'ngdan ham, chapdan ham olib tashlaymiz, so'ngra birinchi belgini katta harfga aylantiramiz, so'ngra bu belgini qolgan qator bilan birlashtiramiz (operator +). Mana kod:

@ Str1 deb e'lon qiling varchar (100) set @ str1 = "oldingi va oxirgi bo'shliqlar bilan test chizig'i" ni tanlang @ str1 ni tanlang yuqori (pastki satr (rtrim (ltrim ( @ str1)), 1,1)) + pastki (pastki satr (rtrim ( ltrim (@ str1)), 2, LEN (rtrim (ltrim (@ str1))) - 1))

Bugungi kunda, menimcha, bu etarli, va agar siz SQL -da dasturlashni yoqtirmoqchi bo'lsangiz, biz ushbu saytda, masalan, bir necha bor bu juda qiziq mavzuga to'xtalib o'tdik.