امروز در یک تالار سوالی مطرح شد با این عنوان "چگونه میتوانم گرههای برگ یک شاخه را بدست بیاورم". خب راه حلی که فورا به ذهنم رسید استفاده از یک query بازگشتی (recursive) بود.
به ساختار سلسله مراتبی زیر توجه بفرمایید:
گره هایی که با رنگ سبز علامت گذاری شده اند را گرههای برگ مینامیم چون که آن گرهها بدون زیر شاخه هستند.
فرض کنید از ما خواسته شده است با داشتن گره A تمام برگهای این شاخه را بدست بیاوریم.
دو مرحله را باید طی کنیم ابتدا تمام ...
مقدمه
در قسمت پیشین نشان داده شد که چگونه کاراکترهای خارج از رنج حروف الفبای انگلیسی از عبارات موجود در یک جدول حذف شدند.
اکنون شرایط کمی تغییر کرده است کاراکترهای ناخواسته در قالب یک مجموعه (جدول) به ما ارائه داده میشوند. ما بایستی تمام کاراکترهای داده شده را از عبارات (موجود در جدول) در صورت تطابق حذف کنیم.
جدول کاراکترهای ناخواسته Unwanted و جدول دادهها Data نامگذاری شده اند.
CREATE TABLE Data
(
id INTEGER NOT NULL PRIMARY KEY ...
شاید برایتان تا حالا پیش آمده باشد که بخواهید یکسری کاراکترهای ناخواسته و اضافه را از یک رشته حذف کنید. بطور مثال تمام کاراکتر هایی غیر عددی را باید از یک رشته حذف نمود تا آن رشته قابلیت تبدیل به نوع integer را بدست بیاورد.
اگر تعداد کاراکترهای ناخواسته محدود و مشخص هستند میتوانید با دستور REPLACE آنها را حذف کنید، مثلا میخواهیم هر سه کاراکتر ~!@ از رشته حذف شوند:
DECLARE @s VARCHAR(50) = '~~~~~~!@@@@@@@ salam';
SET @s = REPLACE(REPLA ...
برای پردازش یک عبارت در بسیاری از موارد نیاز هست که عبارت به کلمات تشکیل دهنده اش تجزیه شود. روشهای متنوعی برای انجام این عمل وجود دارد که یکی از شناخته شدهترین آنها استفاده از جدول اعداد میباشد (البته از بین روشهای مجموعه گرا/set -based).
روشهایی که قرار هست در ادامه توضیح داده شوند بر اساس کوئری بازگشتی میباشند. الگوریتمهای متنوعی بر اساس recursive CTE برای حل این مساله خلق شده اند. که من تنها به دو روش آن اکتفا میکنم.
Recursive ...