حذف نمودن کاراکتر های ناخواسته توسط Recursive CTE قسمت اول
نویسنده: محمد سلیم آبادی
تاریخ: ۱۳۹۱/۱۱/۰۱ ۱۵:۳۵
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
DECLARE @s VARCHAR(50) = '~~~~~~!@@@@@@@ salam'; SET @s = REPLACE(REPLACE(REPLACE(@s, '~', ''), '!', ''), '@', ''); SELECT @s AS new_string
CREATE TABLE test_string
(id integer not null primary key,
string_value varchar(500) not null);
INSERT INTO test_string
VALUES (1, '@@@@ #### salam 12345'),
(2, 'good $$$$$ &&&&&& bye 00000');
WITH CTE (ID, MyString, Ix) AS
(
SELECT id,
string_value,
PATINDEX('%[^a-z ]%', string_value)
FROM test_string
UNION ALL
SELECT id,
CAST(REPLACE(MyString, SUBSTRING(MyString,Ix , 1), '') AS VARCHAR(500)),
PATINDEX('%[^a-z ]%', REPLACE(MyString, SUBSTRING(MyString,Ix , 1), ''))
FROM CTE
WHERE Ix > 0
)
SELECT *
FROM cte
--WHERE Ix = 0;
ORDER BY id, CASE WHEN Ix = 0 THEN 1 ELSE 0 END, Ix;
نتیجه مطلوب ما آن دو سطری است که در کادر بنفش هستند. که اگر به ستون Ix اشان توجه کنید مقدارش برابر با 0 است.
لطفا به سطر اول جدول توجه بفرمایید مشاهده میشود که هر 4 کاراکتر @ یکباره از رشته حذف شدند که بدلیل استفاده از تابع REPLACE میباشد.