اینترنت پنجره ها اندروید
بسط دادن

توابع رشته Sql وقوع پیدا می کنند. توابع رشته SQL

ما به مطالعه زبان پرس و جو SQL ادامه می دهیم و امروز در مورد آن صحبت خواهیم کرد توابع رشته SQL... ما توابع رشته ای اصلی و رایج را پوشش خواهیم داد مانند: LOWER، LTRIM، REPLACEو دیگران، ما همه چیز را البته با مثال در نظر خواهیم گرفت.

نام انتخاب || نام خانوادگی AS FIO از جدول

یا برای جداسازی با فاصله، وارد کنید

نام انتخاب || "" || نام خانوادگی AS FIO از جدول

آن ها دو میله عمودی دو ستون را در یک ستون ترکیب می کنند و برای جدا کردن آنها با فاصله، بین آنها فاصله می گذارم ( از هر کاراکتری می توان استفاده کرد، مانند خط تیره یا کولون) در آپاستروف و همچنین با دو میله عمودی ( Transact-SQL از + به جای دو نوار عمودی استفاده می کند).

تابع INITCAP

سپس یک تابع بسیار مفید نیز وجود دارد، INITCAP- که مقدار را در رشته ای برمی گرداند که در آن هر کلمه با یک حرف بزرگ شروع شده و با حروف کوچک ادامه می یابد. این امر در صورتی ضروری است که قوانین پر کردن را در یک ستون یا ستون دیگر رعایت نکنید و برای اینکه کل مطلب به شکلی زیبا نمایش داده شود، می توانید از این تابع استفاده کنید، مثلاً در جدول خود، رکوردهای ستون نام عبارتند از فرم زیر: IVAN ivanov یا petr Petrov، شما از این تابع استفاده می کنید.

INITCAP (نام) را به عنوان FIO از جدول انتخاب کنید

و شما آن را به این صورت دریافت خواهید کرد.

عملکرد UPPER

یک تابع مشابه، فقط همه کاراکترهای با حروف بزرگ را برمی گرداند، این است بالا.

UPPER (نام) را به عنوان FIO از جدول انتخاب کنید

  • نام - نام ستون؛
  • 20 - تعداد کاراکترها ( طول میدان);
  • "-" کاراکتری است که باید به تعداد کاراکتر مورد نیاز اضافه شود.

تابع RPAD

بیایید فوراً تابع معکوس را در نظر بگیریم. RPAD- اکشن و نحو مانند LPAD است، فقط کاراکترهای سمت راست اضافه می شوند ( در LPAD سمت چپ).

انتخاب RPAD (نام، 20، "-") به عنوان نام از جدول

ایوان —————-
سرگئی -----

عملکرد LTRIM

Next نیز در برخی موارد یک تابع مفید است، LTRIM- این تابع سمت چپ ترین کاراکترهایی را که شما مشخص کرده اید حذف می کند. به عنوان مثال، شما یک ستون "شهر" در پایگاه داده خود دارید که در آن شهر به عنوان "مسکو" نشان داده شده است، و همچنین شهرهایی وجود دارند که به سادگی "مسکو" نشان داده شده اند. اما شما باید گزارش را فقط به شکل "مسکو" بدون "g" نمایش دهید. شما فقط نوعی الگوی "g" را مشخص می کنید و اگر سمت چپ ترین کاراکترها با "g" شروع شوند، این کاراکترها به سادگی نمایش داده نمی شوند.

LTRIM (شهر، "شهر") را به عنوان gorod از جدول انتخاب کنید

این تابع کاراکترهای سمت چپ را اسکن می کند، اگر هیچ کاراکتری در الگوی ابتدای خط وجود نداشته باشد، مقدار اصلی سلول را برمی گرداند و در صورت وجود، آنها را حذف می کند.

عملکرد RTRIM

بیایید فوراً به تابع معکوس نیز نگاهی بیندازیم. RTRIM- مانند LTRIM، فقط کاراکترها در سمت راست جستجو می شوند.

توجه داشته باشید! در Transact-SQL، توابع RTRIM و LTRIM به ترتیب فاصله ها را از سمت راست و چپ حذف می کنند.

تابع REPLACE

حالا بیایید به یک عملکرد جالب توجه کنیم جایگزین کردن- رشته ای را برمی گرداند که در آن همه تطابق کاراکترها با کاراکترهایی که شما مشخص کرده اید جایگزین می شوند. برای آنچه می توان از آن استفاده کرد، به عنوان مثال، شما ستون هایی در پایگاه داده خود دارید، که در آنها تعدادی نماد جداکننده وجود دارد، به عنوان مثال "/". به عنوان مثال، ایوان / ایوانوف، و شما می خواهید ایوان-ایوانوف را نمایش دهید، سپس بنویسید

SELECT REPLACE (نام، "/"، "-") از جدول

و جایگزینی برای نمادها خواهید داشت.

این تابع فقط یک تطابق کامل از کاراکترها را جایگزین می کند، اگر برای مثال "-" را مشخص کنید. فقط برای سه خط تیره جستجو می کند و برخلاف تابع بعدی جایگزین هر خط تیره نمی شود.

تابع ترجمه

ترجمه کردن- یک تابع رشته ای که همه کاراکترهای رشته را با کاراکترهایی که شما مشخص کرده اید جایگزین می کند. بر اساس نام تابع، ممکن است حدس بزنید که این یک فید خط کامل است. تفاوت این تابع با REPLACE در این است که هر کاراکتری را که شما مشخص می کنید جایگزین می کند. شما سه کاراکتر دارید، فرض کنید abc و با کمک TRANSLATE می توانید آن را با abc جایگزین کنید تا a = a, b = b, c = c داشته باشید و طبق این اصل، همه تطابق کاراکترها جایگزین می شوند. و اگر با REPLACE جایگزین کردید، فقط به دنبال یک تطابق کامل از نمادهای abc که در یک ردیف قرار دارند، بودید.

تابع SUBSTR

SUBSTR- این تابع فقط محدوده کاراکترهایی را که شما مشخص کرده اید برمی گرداند. به عبارت دیگر، بیایید بگوییم یک رشته از 10 کاراکتر، و شما به هر ده کاراکتر نیاز ندارید، اما فرض کنید فقط به 3-8 کاراکتر نیاز دارید ( از سوم تا هشتم). با این تابع به راحتی می توانید این کار را انجام دهید. به عنوان مثال، شما یک شناسه در پایگاه داده با طول ثابت (مانند AA-BB-55-66-CC) دارید و هر ترکیبی از کاراکترها به معنای چیزی است. و در یک لحظه خوب به شما گفته شد که فقط 2 و 3 ترکیب از کاراکترها را نمایش دهید، برای این کار یک پرس و جو از فرم زیر بنویسید.

SELECT SUBSTR (شناسه، "4"، "8") از جدول

آن ها ما همه کاراکترها را چاپ می کنیم که با 4 شروع می شوند و با 8 ختم می شوند و پس از این پرس و جو این را دریافت خواهید کرد:

تابع LENGTH - طول رشته

تابع بعدی نیز می تواند مفید باشد، این است طول- که فقط تعداد کاراکترهای یک خط را می شمارد. به عنوان مثال، شما باید دریابید که چند کاراکتر در هر سلول در یک ستون وجود دارد، مثلاً "نام"، جدولی مانند این.

طول (نام) را از جدول انتخاب کنید

پس از این درخواست شما این را دریافت خواهید کرد.

4
6
7

در اینجا ما با شما هستیم و توابع اصلی رشته SQL را بررسی می کنیم. در مقالات بعدی به بررسی SQL خود ادامه خواهیم داد.

توابع Transact-SQL می توانند جمع یا اسکالر باشند. این نوع توابع در این مقاله مورد بحث قرار گرفته است.

توابع مجموع

توابع مجموع محاسبات را روی گروهی از مقادیر ستون انجام می دهند و همیشه یک مقدار واحد را از آن محاسبات برمی گردانند. Transact-SQL از چندین تابع جمع رایج پشتیبانی می کند:

AVG

میانگین حسابی داده های یک ستون را محاسبه می کند. مقادیری که محاسبه روی آنها انجام می شود باید عددی باشد.

MIN و MAX

حداکثر و حداقل مقدار تمام داده های موجود در ستون را تعیین کنید. مقادیر می توانند عددی، رشته ای یا زمان (تاریخ/زمان) باشند.

جمع

مجموع مقادیر یک ستون را محاسبه می کند. مقادیری که محاسبه روی آنها انجام می شود باید عددی باشد.

شمردن

تعداد مقادیر غیر تهی را در یک ستون می شمارد. تابع شمارش (*) تنها تابع مجموعی است که محاسباتی را روی ستون ها انجام نمی دهد. این تابع تعداد ردیف‌ها را برمی‌گرداند (بدون توجه به اینکه ستون‌های جداگانه حاوی مقادیر تهی هستند یا خیر).

COUNT_BIG

مشابه تابع count، با این تفاوت که مقدار داده BIGINT را برمی گرداند.

استفاده از توابع جمع منظم در یک دستور SELECT در مقاله آینده پوشش داده خواهد شد.

توابع اسکالر

توابع اسکالر Transact-SQL در ایجاد عبارات اسکالر استفاده می شود. (یک تابع اسکالر محاسبات را بر روی یک مقدار یا فهرستی از مقادیر انجام می دهد، در حالی که یک تابع مجموع محاسبات را روی گروهی از مقادیر از چندین ردیف انجام می دهد.) توابع اسکالر را می توان به صورت زیر دسته بندی کرد:

    توابع عددی؛

    توابع تاریخ؛

    توابع رشته؛

    توابع سیستم؛

    توابع فراداده

این نوع توابع در بخش های زیر مورد بحث قرار می گیرند.

توابع عددی

توابع عددی Transact-SQL توابع ریاضی برای اصلاح مقادیر عددی هستند. لیستی از توابع عددی و توضیح مختصر آنها در جدول زیر آمده است:

توابع عددی Transact-SQL
عملکرد نحو شرح مثال استفاده
ABS ABS (n)

مقدار مطلق (یعنی مقادیر منفی به صورت مثبت برگردانده می شوند) عبارت عددی n را برمی گرداند.

SELECT ABS (-5.320) - بازگشت 5.320 SELECT ABS (8.90) - بازگشت 8.90

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

توابع مثلثاتی معکوس که کسینوس معکوس، سینوس معکوس و قوس الکتریکی مقدار n را محاسبه می کنند (برای ATN2، مماس قطبی n / m محاسبه می شود). مقادیر اصلی n، m و نتیجه از نوع داده FLOAT هستند.

COS، SIN، TAN، COT COS (n)، SIN (n)، TAN (n)، COT (n)

توابع مثلثاتی که کسینوس، سینوس، مماس، کوتانژانت مقدار n را محاسبه می کنند. نتیجه از نوع داده FLOAT است.

درجه، رادیان DEGREES (n)، رادیان (n)

تابع DEGREES رادیان ها را به ترتیب به درجه، RADIANS و برعکس تبدیل می کند.

SELECT DEGREES (PI () / 4) - برمی‌گرداند 45 SELECT COS (RADIANS (60.0)) - برمی‌گرداند 0.5

سقف سقف (n)

یک عدد را تا یک عدد صحیح بزرگتر گرد می کند.

SELECT CEILING (-5.320) - Returns -5 SELECT CEILING (8.90) - Returns 9

گرد گرد (n، p، [t])

n را به نزدیکترین p گرد می کند. وقتی p یک عدد مثبت است، قسمت کسری n گرد و وقتی منفی است، قسمت صحیح گرد می شود. هنگام استفاده از آرگومان اختیاری t، عدد n گرد نمی شود، بلکه کوتاه می شود (یعنی گرد به پایین).

SELECT ROUND (5.3208, 3) - برمی گرداند 5.3210 SELECT ROUND (125.384, -1) - 130.000 SELECT ROUND (125.384، -1، 1) - برمی گرداند 120.000

کف طبقه (n)

تا کوچکترین عدد صحیح گرد می شود.

SELECT FLOOR (5.88) - 5 را برمی گرداند

انقضا EXP (n)

مقدار e n را محاسبه می کند.

LOG، LOG10 LOG (n)، LOG10 (n)

LOG (n) - لگاریتم طبیعی (یعنی پایه e) n را محاسبه می کند، LOG10 (n) - لگاریتم اعشاری (مبنای 10) n را محاسبه می کند.

PI PI ()

π (3.1415) را برمی گرداند

قدرت POWER (x, y)

مقدار x y را محاسبه می کند.

رند رند ()

تعداد دلخواه از نوع FLOAT را در محدوده مقادیر بین 0 و 1 برمی‌گرداند.

ROWCOUNT_BIG ROWCOUNT_BIG ()

تعداد ردیف‌های جدولی که توسط آخرین دستور Transact-SQL اجرا شده توسط سیستم پردازش شده‌اند را برمی‌گرداند. مقدار برگشتی از نوع BIGINT است.

امضا کردن SIGN (n)

علامت مقدار n را به صورت عدد برمی‌گرداند: 1+ اگر مثبت، -1 اگر منفی است.

SQRT، SQUARE SQRT (n)، SQUARE (n)

SQRT (n) - ریشه دوم n را محاسبه می کند، SQUARE (n) - مربع آرگومان n را برمی گرداند.

توابع تاریخ

توابع تاریخ بخش های مربوط به تاریخ یا زمان یک عبارت را ارزیابی می کنند یا مقدار بازه زمانی را برمی گردانند. توابع تاریخ پشتیبانی شده از Transact-SQL و توضیحات مختصر آنها در جدول زیر نشان داده شده است:

توابع تاریخ Transact-SQL
عملکرد نحو شرح مثال استفاده
GETDATE GETDATE ()

تاریخ و زمان فعلی سیستم را برمی‌گرداند.

انتخاب GETDATE ()

DATEPART DATEPART (مورد، تاریخ)

قسمت تاریخ مشخص شده در پارامتر آیتم را به صورت یک عدد صحیح برمی گرداند.

بازگشت 1 (ژانویه) SELECT DATEPART (ماه، "01/01/2012") - بازگشت 4 (چهارشنبه) SELECT DATEPART (روز هفته، "01/02/2012")

DATENAME DATENAME (مورد، تاریخ)

قسمت تاریخ مشخص شده در پارامتر آیتم را به عنوان یک رشته کاراکتر برمی گرداند.

ژانویه SELECT DATENAME (ماه، "01/01/2012") - چهارشنبه SELECT DATENAME را برمی گرداند (روز هفته، "01/02/2012")

DATEDIFF DATEDIFF (مورد، dat1، dat2)

تفاوت بین دو تاریخ dat1 و dat2 را محاسبه می کند و یک عدد صحیح را در واحدهای مشخص شده در آرگومان آیتم برمی گرداند.

19 (فاصله 19 سال بین تاریخ ها) SELECT DATEDIFF (سال، "01/01/1990"، "01/01/2010") - 7305 را برمی گرداند (7305 روز فاصله بین تاریخ ها) SELECT DATEDIFF (روز، "01/01/ 1990، "01/01 .2010")

DATEADD DATEADD (مورد، n، تاریخ)

nامین تعداد واحدهای مشخص شده در آرگومان آیتم را به تاریخ مشخص شده اضافه می کند. (مقدار n نیز می تواند منفی باشد.)

3 روز به تاریخ فعلی اضافه کنید SELECT DATEADD (روز، 3، GETDATE ())

توابع رشته

توابع رشته ای مقادیر ستون ها را که معمولا از نوع داده کاراکتری هستند دستکاری می کنند. توابع رشته ای پشتیبانی شده در Transact-SQL و توضیحات مختصر آنها در جدول زیر نشان داده شده است:

توابع رشته Transact-SQL
عملکرد نحو شرح مثال استفاده
اسکی، یونیکد ASCII (char)، یونیکد (char)

کاراکتر مشخص شده را به عدد صحیح ASCII مربوطه تبدیل می کند.

SELECT ASCII ("W") - 87 SELECT UNICODE ("u") - 1102

CHAR، NCHAR CHAR (int)، NCHAR (int)

کد ASCII (یا Unicode اگر NCHAR) را به کاراکتر مربوطه تبدیل می کند.

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

شاریندکس CHARINDEX (str1, str2)

موقعیت شروع وقوع زیر رشته str1 را در رشته str2 برمی گرداند. اگر رشته str2 حاوی زیر رشته str1 نباشد، مقدار بازگشتی 0 است

5 SELECT CHARINDEX را برمی گرداند ("مورف"، "چند شکلی")

تفاوت DIFERENCE (str1، str2)

یک عدد صحیح از 0 تا 4 را برمی‌گرداند که تفاوت بین مقادیر SOUNDEX دو رشته str1 و str2 است. متد SOUNDEX عددی را برمی گرداند که صدای سیم را مشخص می کند. با استفاده از این روش می توانید سیم هایی با صدای مشابه را شناسایی کنید. فقط برای کاراکترهای ASCII کار می کند.

2 SELECT DIFFERENCE را برمی گرداند ("املا"، "گفتن")

چپ راست چپ (خیابان، طول)، راست (خیابان، طول)

تعداد اولین کاراکترهای رشته str مشخص شده توسط پارامتر طول LEFT و آخرین کاراکترهای طول رشته رشته برای تابع RIGHT را برمی‌گرداند.

اعلام @str nvarchar (30) = "همگام سازی"; - "Sync" را برمی گرداند SELECT LEFT (@str, 4) - "zats" را برمی گرداند SELECT RIGHT (@str, 5)

LEN LEN (خ)

تعداد کاراکترها (نه تعداد بایت ها) را در str مشخص شده در آرگومان، از جمله فاصله های انتهایی برمی گرداند.

پایین، بالا LOWER (خ)، UPPER (خ)

تابع LOWER تمام حروف بزرگ str1 را به حروف کوچک تبدیل می کند. حروف کوچک و سایر کاراکترهای موجود در رشته تحت تأثیر قرار نمی گیرند. تابع UPPER تمام حروف کوچک str را به حروف بزرگ تبدیل می کند.

اعلام @str nvarchar (30) = "همگام سازی"; - "SYNCHRONIZATION" را برمی گرداند SELECT UPPER (@str) - "SYNCHRONIZATION" SELECT LOWER (@str) را برمی گرداند.

LTRIM، RTRIM LTRIM (خیابان)، RTRIM (خیابان)

تابع LTRIM فاصله های پیشرو در رشته رشته را حذف می کند، RTRIM فاصله های انتهای رشته را بر این اساس حذف می کند.

QUOTENAME QUOTENAME (char_string)

یک رشته یونیکد محدود شده را برای تبدیل رشته ورودی به یک شناسه محدود معتبر برمی‌گرداند.

اعلام @str nvarchar (30) = "همگام سازی"; - «[Sync]» را برمی‌گرداند SELECT QUOTENAME (@str)

پاتیندکس PATINDEX (% p%, expr)

موقعیت شروع اولین وقوع الگوی p را در expr مشخص شده برمی‌گرداند، یا اگر الگوی داده شده یافت نشد، صفر را برمی‌گرداند.

4 SELECT PATINDEX ("% хро%"، "Synchronization") را برمی گرداند.

جایگزین کردن REPLACE (str1, str2, str3)

همه موارد زیر رشته str2 را در رشته str1 با زیر رشته str3 جایگزین می کند.

"Desynchronization" را برمی گرداند SELECT REPLACE ("Synchronization"، "Synchronization"، "Desynchronization")

تکثیر تکرار (خ، i)

رشته str i را بارها تکرار می کند.

"aBaBaBaBaB" را برمی گرداند SELECT RePLICATE ("aB"، 5)

معکوس معکوس (خیابان)

string str را به ترتیب معکوس خروجی می دهد.

"yicazinorkhnis" را برمی گرداند SELECT REVERSE ("Synchronization")

SOUNDEX SOUNDEX (خیابان)

صدای چهار کاراکتری که برای تعیین شباهت دو سیم استفاده شده است را برمی گرداند. فقط برای کاراکترهای ASCII کار می کند.

فضا SPACE (طول)

رشته ای از فضاهای با طول مشخص شده در پارامتر طول را برمی گرداند. آنالوگ REPLICATE (""، طول).

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

عبارت ممیز شناور مشخص شده f را به رشته ای تبدیل می کند که در آن len طول رشته شامل نقطه اعشار، علامت، اعداد و فاصله است (پیش فرض 10 است)، و d تعداد ارقام اعشاری برای بازگشت است.

"3.14" SELECT STR (3.1415, 4, 2) را برمی‌گرداند

چیز STUFF (str1, a, طول, str2)

کاراکترهای طول را از رشته str1 که از موقعیت a شروع می شود حذف می کند و رشته str2 را در جای خود قرار می دهد.

یادداشت در کتاب SELECT STUFF ("Notebook", 5, 0, "in a") - Handbook SELECT STUFF ("Notebook", 1, 4, "Hand")

SUBSTRING SUBSTRING (str1، a، طول)

بازیابی از رشته str، با شروع از موقعیت a، یک رشته فرعی به طول.

توابع سیستم

توابع سیستم Transact-SQL اطلاعات گسترده ای در مورد اشیاء پایگاه داده ارائه می دهند. اکثر توابع سیستم از یک شناسه عددی داخلی (ID) استفاده می کنند که به هر شی پایگاه داده در هنگام ایجاد آن اختصاص داده می شود. با استفاده از این شناسه، سیستم می تواند هر شی در پایگاه داده را به طور منحصر به فرد شناسایی کند.

جدول زیر برخی از مهمترین عملکردهای سیستم را همراه با توضیح مختصری فهرست می کند:

توابع سیستم Transact-SQL
عملکرد نحو شرح مثال استفاده
قالب CAST (w نوع AS [(طول)]

عبارت w را در صورت وجود به نوع داده مشخص شده تبدیل می کند. آرگومان w می تواند هر عبارت معتبری باشد.

3 SELECT CAST را برمی گرداند (3.1258 AS INT)

یکی شدن COALESCE (a1, a2)

اولین مقدار غیر تهی یک عبارت را در لیستی از عبارات a1، a2، ... برمی‌گرداند.

COL_LENGTH COL_LENGTH (obj، col)

طول ستون col شی پایگاه داده (جدول یا نمای) obj را برمی گرداند.

4 SELECT COL_LENGTH را برمی‌گرداند ("کارمند"، "شناسه")

تبدیل تبدیل (نوع [(طول)]، w)

معادل تابع CAST است، اما آرگومان ها به طور متفاوتی مشخص می شوند. با هر نوع داده ای قابل استفاده است.

CURRENT_TIMESTAMP CURRENT_TIMESTAMP

تاریخ و زمان فعلی را برمی گرداند.

کاربر فعلی کاربر فعلی

نام کاربر فعلی را برمی گرداند.

طول داده DATALENGTH (z)

تعداد بایت هایی را که عبارت z اشغال کرده است برمی گرداند.

این کوئری طول هر فیلد را برمی گرداند SELECT DATALENGTH (FirstName) FROM Employee

GETANSINULL GETANSINULL ("dbname")

اگر استفاده از مقادیر null در پایگاه داده dbname مطابق با استاندارد ANSI SQL باشد، عدد 1 را برمی‌گرداند.

ISNULL ISNULL (expr، مقدار)

اگر NULL نباشد مقدار expr را برمی‌گرداند. در غیر این صورت، مقدار برگردانده می شود.

ISNUMERIC ISNUMERIC (expr)

تعیین می کند که expr یک نوع عددی معتبر است یا خیر.

NEWID NEWID ()

یک رشته باینری 16 بایتی منحصر به فرد برای ذخیره مقادیر از نوع داده UNIQUEIDENTIFIER ایجاد می کند.

NEWSEQUENTIALID NEWSEQUENTIALID ()

GUID را ایجاد می کند که بزرگتر از هر GUID دیگری است که قبلاً توسط این عملکرد در رایانه مشخص شده ایجاد شده است. (این تابع فقط می تواند به عنوان پیش فرض برای یک ستون استفاده شود.)

NULLIF NULLIF (expr1، expr2)

اگر مقادیر expr1 و expr2 یکسان باشند، null برمی‌گرداند.

پرس و جو NULL را برای پروژه برمی گرداند - که دارای Number = "p1" است SELECT NULLIF (Number, "p1") FROM Project

مالکیت سرور SERVERPROPERTY (نام ملک)

اطلاعاتی در مورد ویژگی های سرور پایگاه داده دریافت می کند.

SYSTEM_USER SYSTEM_USER

شناسه کاربر فعلی را برمی‌گرداند.

شناسه کاربری شناسه کاربری ()

نام کاربری شناسه کاربری را برمی گرداند. اگر کاربری مشخص نشده باشد، شناسه کاربری فعلی برگردانده می شود.

نام کاربری نام کاربری ()

نام کاربر را با شناسه مشخص شده برمی گرداند. اگر هیچ شناسه ای مشخص نشده باشد، نام کاربر فعلی برگردانده می شود.

توابع فراداده

اساساً توابع فراداده اطلاعات مربوط به یک پایگاه داده مشخص و اشیاء پایگاه داده را برمی گرداند. جدول زیر برخی از مهمترین عملکردهای ابرداده را به همراه توضیح مختصری خلاصه می کند:

توابع فراداده Transact-SQL
عملکرد نحو شرح مثال استفاده
COL_NAME COL_NAME (tab_id، col_id)

نام ستون را با col_id مشخص شده جدول با tab_id برمی گرداند.

نام ستون "LastName" را برمی‌گرداند SELECT COL_NAME (OBJECT_ID ("کارمند")، 3)

COLUMN PROPERTY COLUMNPROPERTY (شناسه، ستون، ویژگی)

اطلاعات مربوط به ستون مشخص شده را برمی گرداند.

مقدار ویژگی PRECISION را برمی‌گرداند - برای ستون شناسه جدول کارمند SELECT COLUMNPROPERTY (OBJECT_ID ("کارمند")، "شناسه"، "دقت")

دارایی پایگاه داده Databaseproperty (پایگاه داده، دارایی)

مقدار ویژگی ویژگی پایگاه داده را برمی گرداند.

مقدار ویژگی IsNullConcat - برای پایگاه داده SampleDb SELECT DATABASEPROPERTY ("SampleDb"، "IsNullConcat") را برمی گرداند.

DB_ID DB_ID ()

شناسه پایگاه داده db_name را برمی گرداند. اگر نام پایگاه داده مشخص نشده باشد، شناسه پایگاه داده فعلی برگردانده می شود.

DB_NAME DB_NAME ()

نام پایگاه داده را با db_id برمی گرداند. اگر هیچ شناسه ای مشخص نشده باشد، نام پایگاه داده فعلی برگردانده می شود.

INDEX_COL INDEX_COL (جدول، i، خیر)

نام ستون نمایه شده جدول جدول را برمی گرداند. ستون با شناسه شاخص i و موقعیت شماره ستون در آن شاخص نشان داده می شود.

عدم مالکیت INDEXPROPERTY (obj_id، index_name، ویژگی)

ویژگی‌های شاخص یا آمار نام‌گذاری شده را برای شماره شناسایی جدول مشخص شده، نام شاخص یا آمار و نام ویژگی را برمی‌گرداند.

OBJECT_NAME OBJECT_NAME (obj_id)

نام شی پایگاه داده شناسایی شده توسط obj_id را برمی گرداند.

SELECT OBJECT_NAME (245575913)؛

OBJECT_ID OBJECT_ID (obj_name)

شناسه شی obj_name پایگاه داده را برمی گرداند.

245575913 را برمی گرداند - شناسه جدول کارمند SELECT OBJECT_ID ("کارمند")

مال شیء OBJECT PROPERTY (obj_id، ویژگی)

اطلاعات مربوط به اشیاء را از پایگاه داده فعلی برمی گرداند.

با سلام خدمت خوانندگان عزیز سایت وبلاگ. امروز می خواهم در مورد زبان SQL و به ویژه در مورد عملکردهای پردازش متن صحبت کنم. برای ایجاد و مدیریت یک وب سایت، اغلب نیازی به دانستن زبان SQL نیست. سیستم های مدیریت محتوا به شما این امکان را می دهند که محتوای سایت را بدون نوشتن پرس و جو ویرایش کنید. اما حداقل یک آشنایی گذرا با زبان پرس و جو ساختاریافته به شما کمک می کند تا سرعت اصلاح و مدیریت داده های پایگاه داده سایت خود را به میزان قابل توجهی افزایش دهید.

من اغلب با وظایفی مواجه می شوم: حذف بخشی از متن از فیلدهای متنی پایگاه داده، ترکیب داده های رشته ای یا چیز دیگری که به متن مربوط می شود. انجام همه این کارها از طریق پنل های مدیریت سایت بسیار ناخوشایند و خسته کننده است. نوشتن یک کوئری پایگاه داده که همه این مراحل را در چند ثانیه انجام می دهد بسیار ساده تر است.

بنابراین، بیایید شروع کنیم ...

توابع نمادین در زبان sql

بیایید به ترتیب با ساده ترین شروع کنیم. ابتدا اجازه دهید تابع رشته ASCII را بررسی کنیم که برای تعیین کد اسکی کاراکترهای متن استفاده می شود:

عدد صحیح ASCII(خیابان رشته)

تابع یک مقدار صحیح - کد اسکی اولین کاراکتر سمت چپ رشته str را برمی گرداند. اگر string str خالی باشد 0 و اگر رشته وجود نداشته باشد NULL برمی‌گرداند.

SELECT ASCII ("t");
موقعیت: 116
SELECT ASCII ("تست")؛
موقعیت: 116
SELECT ASCII (1)؛
موقعیت: 49

عدد صحیح سفارش(خیابان رشته)

اگر اولین کاراکتر سمت چپ str چند بایت باشد، کد خود را به این فرمت برمی گرداند: ((کد اسکی بایت اول) * 256 + (کد اسکی بایت دوم)) [* 256 + سوم بایت کد اسکی ...]. اگر اولین کاراکتر سمت چپ string str چند بایت نباشد، مانند یک تابع ASCII کار می کند - کد ASCII خود را برمی گرداند.

SELECT ORD ("تست")؛
موقعیت: 116

تابع CHAR ارتباط نزدیکی با تابع ASCII دارد و برعکس عمل می کند:

رشته CHAR(بین عدد صحیح, ...)

تابع CHAR یک رشته کاراکتر را بر اساس کدهای اسکی آنها برمی گرداند. اگر NULL در بین مقادیر یافت شود، از آن صرفنظر می شود.

SELECT CHAR (116، "101"، 115، "116");
نتیجه: "تست"

توابع SQL برای الحاق رشته ها

یکی از محبوب ترین دسته ویژگی ها. از این گذشته ، اغلب لازم است مقادیر چندین فیلد از جداول پایگاه داده سایت را ترکیب کنید. چندین تابع در زبان SQL به طور همزمان وجود دارد الحاق رشته.

تابع CONCAT:

رشته CONCAT(خ1 رشته, str2 رشته,...)

تابع رشته ای را برمی گرداند که با الحاق آرگومان ها ایجاد شده است. بیش از دو آرگومان را می توان مشخص کرد. اگر یکی از آرگومان ها NULL باشد، نتیجه برگشتی NULL خواهد بود. مقادیر عددی به رشته تبدیل می شوند.

SELECT CONCAT ("سلام"، ""، "دنیا"، "!")؛
نتیجه: "سلام دنیا!"
SELECT CONCAT ("Hello"، "NULL"، "World"، "!")؛
نتیجه: NULL
SELECT CONCAT ("Number pi", "=", 3.14);
نتیجه: "Number pi = 3.14"

همانطور که از مثال ها می بینید، رشته ها بدون جداکننده به هم متصل شده اند. برای جدا کردن کلمات در مثال اول، باید از فاصله به عنوان آرگومان استفاده کنید. اگر کلمات بیشتری وجود داشت، هر بار درج فاصله چندان راحت نبود.

برای چنین مواردی، تابع CONCAT_WS وجود دارد:

رشته CONCAT_WS(جداکننده رشته، خیابان 1 رشته, str2 رشته,...)

این تابع رشته ها را مانند تابع CONCAT به هم متصل می کند، اما یک جداکننده بین آرگومان ها درج می کند. اگر جداکننده NULL باشد، نتیجه NULL است. آرگومان های رشته NULL نادیده گرفته می شوند.

CONCAT_WS را انتخاب کنید (""، "ایوانف"، "ایوان"، "ایوانوویچ")؛
نتیجه: "ایوانف ایوان ایوانوویچ"
CONCAT_WS را انتخاب کنید (NULL، "ایوانوف"، "ایوان"، "ایوانوویچ")؛
نتیجه: NULL
CONCAT_WS را انتخاب کنید (""، "ایوانوف"، "NULL"، "ایوان"، "ایوانوویچ")؛
نتیجه: ""ایوانف ایوان ایوانوویچ"

در صورت الحاق تعداد زیادی رشته که باید توسط جداکننده از هم جدا شوند، تابع CONCAT_WS بسیار راحت تر از تابع CONCAT است.

گاهی اوقات لازم است با تکرار یک کاراکتر یک رشته را به تعداد مشخصی کاراکتر طولانی کنیم. این نیز نوعی الحاق رشته است. برای این کار می توانید از توابع استفاده کنید LPADو RPAD... توابع دارای نحو زیر هستند:

رشته LPAD(خیابان رشته، لن عدد صحیح، padstr رشته)
رشته RPAD(خیابان رشته، لن عدد صحیح، padstr رشته)

تابع LPAD str را برمی‌گرداند که در سمت چپ با padstr به طول len اضافه شده است. تابع RPAD نیز همین کار را انجام می دهد، با این تفاوت که ازدیاد طول در سمت راست رخ می دهد.

SELECT LPAD ("تست"، 10، ".")؛
نتیجه: ...... تست
SELECT RPAD ("تست"، 10، ".")؛
نتیجه: تست ......

در این توابع باید به آن توجه کنید لنز پارامتر، که تعداد کاراکترهای نمایش داده شده را محدود می کند. بنابراین، اگر طول رشته str از پارامتر len بزرگتر باشد، رشته کوتاه می شود:

SELECT LPAD ("تست"، 3، ".")؛
نتیجه: تس

تعیین طول رشته در کوئری های sql

برای تعیین تعداد کاراکترهای یک رشته در زبان SQL، تابع LENGTH مسئول است - طول رشته:

عدد صحیح طول(خیابان رشته)

تابع یک عدد صحیح برابر با تعداد کاراکترهای str را برمی گرداند.

SELECT LENGTH ("تست")؛
نتیجه: 4

در مورد استفاده از رمزگذاری های چند بایتی، تابع LENGTH نتیجه صحیح را بر نمی گرداند. به عنوان مثال، اگر رمزگذاری یونیکد تنظیم شده باشد، درخواست:

SELECT LENGTH ("تست")؛

8 برمی گردد. که به راحتی می توانید ببینید، دو برابر تعداد واقعی کاراکترها است. در این مورد، باید از تابع CHAR_LENGTH استفاده کنید:

عدد صحیح CHAR_LENGTH(خیابان رشته)

تابع نیز برمی گردد طول خطخیابان و پشتیبانی می کند کاراکترهای چند بایتی.

مثلا:

CHAR_LENGTH ("تست") را انتخاب کنید.
نتیجه: 4

جستجوی زیر رشته در یک رشته با استفاده از sql

چندین تابع برای محاسبه موقعیت یک رشته فرعی در یک رشته در زبان sql وجود دارد. اولین موردی که به آن نگاه می کنیم تابع POSITION است:

عدد صحیحموقعیت(substr رشتهدر خ رشته)

شماره موقعیت اولین وقوع substring را در string str برمی‌گرداند و اگر رشته فرعی پیدا نشد، 0 را برمی‌گرداند. تابع POSITION می تواند کاراکترهای چند بایتی را مدیریت کند.

SELECT POSITION ("cd" IN "abcdcde");
نتیجه: 3
SELECT POSITION ("xy" در "abcdcde")؛
نتیجه: 0

تابع LOCATE زیر به شما این امکان را می دهد که جستجوی یک زیررشته را در یک موقعیت خاص آغاز کنید:

عدد صحیح مکان(substr رشته،خ رشته، پوز عدد صحیح)

موقعیت اولین رخداد substring را در string str، که از موقعیت pos شروع می‌شود، برمی‌گرداند. اگر پارامتر pos مشخص نشده باشد، جستجو از ابتدای رشته انجام می شود. اگر substr پیدا نشد، 0 را برمی گرداند. از کاراکترهای چند بایتی پشتیبانی می کند.

SELECT LOCATE ("cd"، "abcdcdde"، 5)؛
نتیجه: 5
SELECT LOCATE ("cd"، "abcdcdde")؛
نتیجه: 3

تابع INSTR مشابه توابع POSITION و LOCATE است:

عدد صحیح INSTR(خیابان رشته، فرعی رشته)

موقعیت اولین وقوع substring را در string str و همچنین در بالا برمی‌گرداند. تنها تفاوتی که با توابع POSITION و LOCATE دارد این است که آرگومان ها با هم عوض می شوند.

ابتدا دو تابع LEFT و RIGHT را به طور همزمان در نظر می گیریم که از نظر عملکرد مشابه هستند:

رشته ترک کرد(خیابان رشته، لن عدد صحیح)
رشته درست(خیابان رشته، لن عدد صحیح)

تابع LEFT لنز اولین کاراکترها را از string str برمی گرداند و تابع RIGHT همان تعداد کاراکترهای آخر را برمی گرداند. پشتیبانی از کاراکترهای چند بایتی

SELECT LEFT ("مسکو"، 3)؛
نتیجه: Mos
SELECT RIGHT ("مسکو"، 3)؛
نتیجه: kva

رشته SUBSTRING(خیابان رشته، پوز عدد صحیح، لن عدد صحیح)
رشته میانه(خیابان رشته، پوز عدد صحیح، لن عدد صحیح)

توابع به شما این امکان را می دهند که یک رشته فرعی از کاراکترهای طولی str را از موقعیت pos دریافت کنید. اگر پارامتر len مشخص نشده باشد، کل رشته فرعی که از موقعیت pos شروع می شود، برگردانده می شود.

SELECT SUBSTRING ("مسکو - پایتخت روسیه"، 4، 6)؛
نتیجه: مسکو
SELECT SUBSTRING ("مسکو پایتخت روسیه است"، 4)؛
نتیجه: مسکو پایتخت روسیه است

من برای تابع MID ​​مثال نمی زنم، زیرا نتایج مشابه خواهند بود.

تابع SUBSTRING_INDEX جالب:

رشته SUBSTRING_INDEX(خیابان رشته، دلیم رشته، شمردن عدد صحیح)

تابع زیر رشته ای از str را برمی گرداند که با حذف کاراکترها پس از delim در شمارش موقعیت به دست آمده است. پارامتر شمارش می تواند مثبت یا منفی باشد. اگر شمارش مثبت باشد، موقعیت جداکننده از سمت چپ شمارش می‌شود و کاراکترهای سمت راست جداکننده حذف می‌شوند. اگر شمارش منفی باشد، موقعیت جداکننده به سمت راست شمارش می‌شود و کاراکترهای سمت چپ جداکننده حذف می‌شوند. شاید توضیحات خیلی گیج کننده باشد، اما با مثال ها واضح تر می شود.

SELECT SUBSTRING_INDEX ("www.mysql.ru"، "."، 1)؛
نتیجه: www

در این مثال، تابع اولین رخداد کاراکتر نقطه را در رشته "www.mysql.ru" پیدا می کند و همه کاراکترهای زیر آن، از جمله خود جداکننده را حذف می کند.

SELECT SUBSTRING_INDEX ("www.mysql.ru"، "."، 2)؛
نتیجه: www.mysql

در اینجا تابع دومین رخداد نقطه را جستجو می کند، تمام کاراکترهای سمت راست آن را حذف می کند و رشته فرعی حاصل را برمی گرداند. و مثال دیگری با مقدار منفی برای پارامتر count:

SUBSTRING_INDEX ("www.mysql.ru"، "."، -2) را انتخاب کنید.
نتیجه: mysql.ru

در این مثال، تابع SUBSTRING_INDEX دومین نقطه را از سمت راست جستجو می کند، کاراکترهای سمت چپ آن را حذف می کند و زیر رشته به دست آمده را خروجی می دهد.

حذف فاصله ها از یک رشته

سه تابع در SQL برای حذف فضاهای اضافی از ابتدا و انتهای یک رشته وجود دارد.

تابع LTRIM:

رشته LTRIM(خیابان رشته)

فاصله های ابتدای str را حذف می کند و نتیجه را برمی گرداند.

عملکرد RTRIM:

رشته RTRIM(خیابان رشته)

همچنین فاصله ها را از str، فقط از انتهای آن حذف می کند. هر دو تابع از کاراکترهای چند بایتی پشتیبانی می کنند.

SELECT LTRIM ("متن")؛
نتیجه: "متن"
SELECT RTRIM ("متن")؛
نتیجه: "متن"

و سومین تابع TRIM به شما امکان می دهد فوراً فاصله ها را از ابتدا و انتهای یک رشته حذف کنید:

رشته TRIM([ رشته FROM] خ رشته)

پارامتر str مورد نیاز است، بقیه پارامترها اختیاری هستند. اگر فقط یک پارامتر str مشخص شده باشد، رشته str را برمی گرداند و فاصله ها را از ابتدا و انتهای رشته به طور همزمان حذف می کند.

SELECT TRIM ("متن")؛
نتیجه: "متن"

پارامتر remstr را می توان برای تعیین کاراکترها یا زیر رشته هایی که باید از ابتدا و انتهای رشته حذف شوند استفاده کرد. با استفاده از پارامترهای کنترلی BOTH، LEADING، TRAILING، می توانید تعیین کنید که کاراکترها از کجا حذف شوند:

  • BOTH - رشته فرعی remstr را از ابتدا و از انتهای رشته حذف می کند.
  • LEADING - remstr را از ابتدای خط حذف می کند.
  • TRAILING - remstr را از انتهای خط حذف می کند.

SELECT TRIM (هر دو "و" FROM "متن")؛
نتیجه: "متن"
SELECT TRIM (به رهبری "و" FROM "textaa")؛
نتیجه: "textaa"
SELECT TRIM (انتخاب "و" از "aaatext")؛
نتیجه: "aaatext"

تابع SPACE به شما امکان می دهد رشته ای متشکل از تعداد مشخصی فاصله دریافت کنید:

رشته فضاعدد صحیح)

رشته ای متشکل از n فاصله را برمی گرداند.

تابع REPLACE برای کاراکترهای داده شده را در یک رشته جایگزین می کند:

رشته جایگزین کردن(خیابان رشته، from_str رشته، to_str رشته)

تابع همه زیررشته های from_str در رشته str را با to_str جایگزین می کند و نتیجه را برمی گرداند. پشتیبانی از کاراکترهای چند بایتی

SELECT REPLACE ("جایگزینی رشته فرعی"، "رشته فرعی"، "متن")
نتیجه: "تعویض متن"

عملکرد REPEAT:

رشته تکرار(خیابان رشته، شمردن عدد صحیح)

تابع رشته ای را برمی گرداند که از تعداد تکرارهای str تشکیل شده است. پشتیبانی از کاراکترهای چند بایتی

SELECT REPEAT ("w"، 3)؛
نتیجه: "www"

تابع REVERSE خط را معکوس می کند:

رشته معکوس(خیابان رشته)

همه کاراکترها را از آخرین به اول در str تعویض می کند و نتیجه را برمی گرداند. پشتیبانی از کاراکترهای چند بایتی

SELECT REVERSE ("متن")؛
نتیجه: "tsket"

تابع INSERT برای درج یک رشته فرعی در یک رشته:

رشتهدرج کنید(خیابان رشته، پوز عدد صحیح، لن عدد صحیح, newstr رشته)

رشته حاصل از درج رشته فرعی newstr را در str در موقعیت pos برمی‌گرداند. پارامتر len مشخص می کند که چه تعداد کاراکتر از str حذف خواهد شد، از موقعیت pos شروع می شود. پشتیبانی از کاراکترهای چند بایتی

SELECT INSERT ("متن"، 2، 5، "MySQL")؛
نتیجه: "tMySQL"
"SELECT INSERT (" text ", 2, 0, MySQL ");
نتیجه: "tMySQLext"
SELECT INSERT ("insert text", 2, 7, "MySQL");
نتیجه: "SELECT INSERT (" insert text ", 2, 7, MySQL ");"

اگر به طور ناگهانی نیاز به جایگزینی تمام حروف بزرگ در متن با حروف بزرگ دارید، می توانید از یکی از دو تابع استفاده کنید:

رشته LCASE(خیابان رشته) و رشته پایین تر(خیابان رشته)

هر دو تابع جایگزین حروف بزرگ در str شده و نتیجه را برمی گرداند. هر دو از کاراکترهای چند بایتی پشتیبانی می کنند.

SELCET LOWER ("ABVGDeZhZiKL")؛
نتیجه: "abvgdezhzikl"

اگر برعکس، لازم است که حروف بزرگ را با حروف بزرگ جایگزین کنید، یکی از این دو تابع نیز قابل استفاده است:

رشته UCASE(خیابان رشته) و رشته UPPER (خیابان رشته)

توابع رشته رشته را برمی گرداند و همه کاراکترهای بزرگ را با حروف بزرگ جایگزین می کنند. همچنین از کاراکترهای چند بایتی پشتیبانی می کند.
مثال:

SELECT UPPER ("Abvgdezhz")؛
نتیجه: "ABVGDEZHZ"

توابع رشته ای در SQL کمی بیشتر از آنچه در این مقاله بحث شد وجود دارد. اما از آنجایی که حتی بیشتر توابع مورد بحث در اینجا به ندرت مورد استفاده قرار می گیرند، بررسی آنها را تمام می کنم. در مقالات بعدی سعی خواهم کرد نمونه های واقعی و کاربردی استفاده از توابع رشته SQL را بررسی کنم. پس فراموش نکنید که در به روز رسانی وبلاگ مشترک شوید. تا دفعه بعد!

در اینجا لیست کاملی از توابع رشته ای گرفته شده از BOL آمده است:

نتیجه - 11. برای اینکه بفهمیم کدام حروف هستند، می توانیم از تابع CHAR استفاده کنیم که یک کاراکتر را با استفاده از یک کد ASCII شناخته شده (از 0 تا 255) برمی گرداند:

و به عنوان مثال، چگونه می توانید جدولی از کدهای همه حروف الفبا را دریافت کنید:

SELECT CHAR (ASCII ("a") + num-1) حرف، ASCII ("a") + num - 1 FROM (SELECT 5 * 5 * (a-1) + 5 * (b-1) + c AS num از (انتخاب 1 a UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5) x CROSS Join (انتخاب 1 b UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 CROSSINy 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 BETWEEN ASCII ("a") و ASCII ("z")

برای کسانی که هنوز از تولید یک دنباله اعداد آگاه نیستند، به مقاله مربوطه مراجعه می کنم.

همانطور که می دانید کدهای حروف کوچک و بزرگ متفاوت است. بنابراین، برای به دست آوردن یک مجموعه کامل بدون بازنویسی پرس و جو، فقط باید یک مشابه را به کد بالا اضافه کنید:

فکر می کنم در صورت لزوم اضافه کردن این حرف به جدول دشوار نخواهد بود.

اکنون مشکل یافتن زیررشته مورد نظر در یک عبارت رشته را در نظر بگیرید. دو تابع وجود دارد که می توان برای این کار استفاده کرد - شاریندکسو پاتیندکس... هر دو موقعیت شروع (موقعیت اولین کاراکتر زیررشته) رشته فرعی را در رشته برمی گردانند. تابع CHARINDEX دارای نحو است:

شاریندکس ( lookup_expression, string_expression[, نقطه شروع])

در اینجا یک پارامتر عدد صحیح اختیاری است نقطه شروعموقعیتی را در عبارت رشته ای که جستجو از آن انجام می شود را مشخص می کند lookup_expression... اگر این پارامتر حذف شود، جستجو از ابتدا انجام می شود string_expression... مثلا درخواست

لازم به ذکر است که اگر زیر رشته یا عبارت رشته مورد نظر NULL باشد، نتیجه تابع نیز NULL خواهد بود.

مثال زیر موقعیت اولین و دومین رخداد شخصیت "a" را در نام کشتی "California" مشخص می کند.

و در اینجا، برای مثال، چگونه می توانید نام کشتی هایی را پیدا کنید که دارای یک دنباله از سه کاراکتر هستند که اولین و آخرین آنها "e" است:

اتاق بخار ترک کردعملکرد درستتعداد مشخص شده کاراکتر را در سمت راست عبارت رشته ای برمی گرداند:

درست (<بیان رشته>,<تعداد کاراکترها>)

به عنوان مثال، در اینجا نحوه شناسایی نام کشتی هایی که با یک حرف شروع و ختم می شوند، آمده است:

در اینجا نام کلاس و نام کشتی را با فاصله از هم جدا می کنیم. علاوه بر این، برای اینکه کل ساختار به عنوان یک آرگومان برای یک تابع تکرار نشود، از یک پرس و جو استفاده می کنیم. نتیجه به شکل زیر خواهد بود:

برای از بین بردن این مورد، می توانید از یک تابع مفید دیگر استفاده کنید LEN (<بیان رشته>) که تعداد کاراکترهای رشته را برمی گرداند. بیایید خودمان را به مواردی محدود کنیم که تعداد کاراکترها بیش از یک باشد:

عملکرد تکثیراضافه کردن ثابت "abcde" با پنج فاصله در سمت راست، که توسط تابع شمارش نمی شود LEN، - در هر دو مورد 5 می گیریم.
عملکرد طول دادهتعداد بایت ها را در نمایش یک متغیر برمی گرداند و تفاوت بین CHAR و VARCHAR را به ما نشان می دهد. طول داده 12 برای CHAR و 10 برای VARCHAR به ما می دهد.
همانطور که انتظار میرفت، طول دادهطول واقعی متغیر را برای یک متغیر VARCHAR برمی گرداند. اما چرا نتیجه برای متغیری از نوع CHAR برابر با 12 است؟ نکته این است که CHAR یک نوع است طول ثابت... اگر مقدار متغیر کمتر از طول آن باشد و طول آن را CHAR (12) اعلام کنیم، با افزودن فاصله‌های انتهایی، مقدار متغیر به طول مورد نیاز «تراز» می‌شود.

این سایت حاوی وظایفی است که در آنها می خواهید مقادیر ارائه شده در قالب متن را به ترتیب عددی (پیدا کردن حداکثر و غیره) ترتیب دهید. به عنوان مثال، شماره صندلی هواپیما ("2d") یا سرعت CD ("24x"). مشکل این است که متن به این صورت مرتب شده است (صعودی)

اگر لازم است مکان ها به ترتیب صعودی ردیف ها مرتب شوند، ترتیب باید به شرح زیر باشد

اگر فقط خودمان را به این محدود کنیم، نتیجه می گیریم

برای مرتب سازی باقی مانده است

امروز پیشنهاد می کنم نمونه های ساده استفاده را در نظر بگیریم توابع رشته Transact-SQL، و نه فقط توضیح و نمونه هایی از برخی توابع، بلکه ترکیب آنها، i.e. چگونه می توانید آنها را در یکدیگر لانه کنید، زیرا برای اجرای بسیاری از وظایف، توابع استاندارد کافی نیستند و باید آنها را با هم استفاده کنید. و بنابراین من می خواهم چند نمونه ساده از نوشتن چنین پرس و جوهایی را به شما نشان دهم.

ما قبلا توابع رشته SQL را بررسی کرده ایم، اما از آنجایی که پیاده سازی های این زبان در DBMS های مختلف متفاوت است، به عنوان مثال، برخی از توابع در Transact-SQL نیستند، اما در PL / PGSql هستند، و آخرین باری که به توابع رشته نگاه کردیم. که می تواند در plpgsql استفاده شود و بنابراین امروز به طور خاص در مورد Transact-SQL صحبت خواهیم کرد.

چگونه می توان SUBSTRING، CHARINDEX و LEN را با هم ترکیب کرد

و بنابراین، برای مثال، شما باید بخشی از آن را در یک رشته با توجه به یک معیار خاص جستجو کنید و آن را برش دهید، و نه اینکه فقط قسمتی از همان نوع را جستجو کنید، بلکه به صورت پویا، یعنی. رشته جستجو برای هر خط متفاوت خواهد بود. نمونه ها در Management Studio SQL Server 2008 نوشته خواهند شد.

برای این کار از توابع زیر استفاده خواهیم کرد:

  • SUBSTRING(str, start, len) - این تابع بخشی از یک رشته را از رشته دیگر قطع می کند. دارای سه پارامتر 1. این خود رشته است. 2. موقعیت شروع که از آن باید برش را شروع کرد. 3. تعداد کاراکترها، تعداد کاراکترهایی که باید بریده شوند.
  • شاریندکس(str1, str2) - str1 را در str2 جستجو می کند و در صورت یافتن چنین رشته ای ترتیب کاراکتر اول را برمی گرداند. دارای یک پارامتر اختیاری سوم است که با آن می توانید تعیین کنید که جستجو از کدام سمت شروع شود.
  • LEN(str1) طول رشته است، یعنی. شخصیت ها.

همانطور که می بینید، در اینجا من از اعلان متغیرها استفاده کردم و شما می توانید به جای متغیرها، فیلدهای خود را در درخواست جایگزین کنید. این هم خود کد:

rezult@ را به‌عنوان varchar (10) اعلام کنید - رشته منبع str1 را به‌عنوان varchar (100) اعلام کنید - رشته جستجوی str2 را به‌عنوان varchar (10) تعیین کنید. "string" set @ rezult = substring (@ str1، CHARINDEX (@ str2، @ str1)، LEN (@ str2)) @rezult را انتخاب کنید

نکته اینجاست: ما از تابع len استفاده می کنیم تا بفهمیم چند کاراکتر باید برش داده شوند، و charindex موقعیتی را تعیین می کند که از آن برش شروع شود، و بر این اساس substring خود انتخاب را در رشته انجام می دهد.

چگونه می توان LEFT، RIGHT و LEN را با هم ترکیب کرد

فرض کنید باید چند کاراکتر اول یک رشته را دریافت کنید یا این اولین کاراکترهای یک رشته را برای وجود چیزی بررسی کنید، مثلاً نوعی عدد، و طول آن طبیعتاً متفاوت است (البته یک مثال آزمایشی) .

  • ترک کرد(str، kol) - تابع تعداد مشخص شده کاراکترها را از سمت چپ برش می دهد، دارای دو پارامتر است، اولی یک رشته و دومی به ترتیب تعداد کاراکترها است.
  • درست(str، kol) - تابع تعداد مشخص شده کاراکتر را از سمت راست برش می دهد، پارامترها یکسان هستند.

اکنون از کوئری های ساده در مقابل جدول استفاده می کنیم

ابتدا بیایید یک test_table ایجاد کنیم:

ایجاد جدول (IDENTITY (1،1) NOT NULL، (18، 0) NULL، (50) NULL، کلید اولیه محدود (ASC) با (PAD_INDEX = OFF، STATISTICS_NORECOMPUTE = OFF، IGNORE_WOWKEYOFFON = OFF، IGNORE_WALLONS، OFF، IGNORE_WALLONS) ) در حال حرکت

بیایید آن را با داده های آزمایشی پر کنیم و پرس و جوهای زیر را بنویسیم:

همانطور که متوجه شدید، اولین پرس و جو فقط یک انتخاب از همه ردیف ها است (SQL Basics - دستور انتخاب)، و دومی ترکیبی مستقیم از توابع ما است، کد زیر است:

* از test_table شماره را انتخاب کنید، سمت چپ (متن، LEN (شماره)) را به عنوان str از test_table انتخاب کنید

و اگر این اعداد در سمت راست بودند، از تابع استفاده می کردیم درست.

استفاده از Rtrim، Ltrim، Upper و Lower در ترکیب

فرض کنید یک خط با فاصله در ابتدا و انتهای آن دارید و البته از شر آنها خلاص می شوید و مثلاً آنها را می سازید تا حرف اول این خط بزرگ شود.

  • Rtrim(str) - فاصله ها را از سمت راست حذف می کند.
  • Ltrim(str) - فاصله ها را از سمت چپ حذف می کند.
  • بالا(str) - رشته را به حروف بزرگ تبدیل می کند.
  • پایین تر(str) - رشته را به حروف کوچک تبدیل می کند.

همانطور که می بینید، برای تعمیر از اینجا نیز استفاده کردیم رشته فرعیو لن... معنی کوئری ساده است، فاصله‌ها را از سمت راست و چپ حذف می‌کنیم، سپس با برش کاراکتر اول را به بزرگ تبدیل می‌کنیم، سپس (اپراتور +) این کاراکتر را با بقیه رشته ترکیب می‌کنیم. این هم کد:

str1@ را به عنوان varchar (100) تنظیم کنید str1 = "رشته آزمایشی با فاصله های پیشرو و انتهایی" @ str1 را انتخاب کنید بالا (زیررشته (rtrim (ltrim (@ str1))، 1,1)) + پایین (زیر رشته ( rtrim ( ltrim (@ str1))، 2، LEN (rtrim (ltrim (@ str1))) - 1))

برای امروز، فکر می کنم کافی است، و اگر برنامه نویسی در SQL را دوست دارید، در این سایت مثلاً بیش از یک بار به این موضوع بسیار جالب توجه کرده ایم.