PDA

View Full Version : کد جداسازی



elham_gharegozloo
جمعه 01 آذر 1392, 15:12 عصر
من یک رشته دارم که طولش مشخص نیست . مثلا 6 کاراکتر ، شاید 10 شاید 12 شاید 20

به کمک یک قطعه کد ، به صورت 3 رقم ، 3 رقم از سمت راست جدا بشه .بجز استفاده از دستور format

golnaz_a
جمعه 01 آذر 1392, 17:35 عصر
می خواهیدبا دستورات sql جدا بشه؟ format دستور sql نیست!

محمد سلیم آبادی
جمعه 01 آذر 1392, 17:56 عصر
تابع format در نسخه 2012 در T-SQL اجرا می شود.
به هر حال راه حلی که من مدنظر دارم بر پایه این هست که شما یه حداکثر طول برای رشته خود در نظر بگیرید.
از دو طرف می توانید اقدام به تجزیه رشته کنید راست و چپ. اگر از راست اقدام می کنید کار کمی دشوار میشود باید توسط تابع reverse رشته را برعکس کنید و زیر رشته مورد نظر را بدست آورده و مجدد آن را reverse کنید.
از چپ مستلزم این هست که شما طول رشته را ضریبی از 3 درآورده باشید در این حالت به سادگی می توانید از چپ شروع به تجزیه رشته کنید.

اگر نیاز به کد دقیق دارید بایستی یک Sample در اینجا ارائه دهید.

golnaz_a
جمعه 01 آذر 1392, 19:15 عصر
این طور هم میشه نوشت:


DECLARE @SepratedString nvarchar(max)
WHILE LEN(@String) >= 3
BEGIN
SET @SepratedString = SUBSTRING(@String, LEN(@String)-2,3)
SET @String = SUBSTRING(@String, 0,LEN(@String)-2)
print @SepratedString
CONTINUE
END
IF LEN(@String)<3
SET @SepratedString = @String
print @SepratedString

elham_gharegozloo
شنبه 02 آذر 1392, 06:38 صبح
اگر بخواهیم ارقام با کاما از هم جدا شود چطور؟

محمد سلیم آبادی
شنبه 02 آذر 1392, 08:06 صبح
--پشتیبانی تا 12 رقم
--داده ها فرض می شود از جدول قرار هست خوانده شوند
select replace(ltrim(replace(replace(
reverse(stuff(stuff(stuff(t.s,4,0,','),8,0,','),12 ,0,','))
, '~',''), ',', ' ')),' ',',') as result

from (--مقادیر مورد نظر در زیر لیست شده اند
values ('1'),
('1234567890'),
('1234')
)as d(s)
cross apply (select reverse(replicate('~',11)+d.s)) as t(s);

/*خروجی کوئری فوق
result
--------------
1
1,234,567,890
1,234
*/

ali_abbasi22145
شنبه 03 اسفند 1392, 11:07 صبح
سلام و تشکر از دوستمان
من کدش یکمی تغییر دادم و خوب جواب داد
--پشتیبانی تا 12 رقم
--داده ها فرض می شود از جدول قرار هست خوانده شوند
select replace(ltrim(replace(replace(
reverse(stuff(stuff(stuff(t.s,4,0,','),8,0,','),12 ,0,','))
, '~',''), ',', ' ')),' ',',') as result

from ( select national_code from CardTable
)as d(s)
cross apply (select reverse(replicate('~',11)+d.s)) as t(s);