PDA

View Full Version : بدست آوردن رشته هایی که با dash از هم جدا شده اند



firoozi90
شنبه 31 خرداد 1393, 08:09 صبح
سلام دوستان
من توی دیتابیسم مقادیر یکی از فیلدها که بصورت رشته هستش با - از هم جدا شده اند مثلا (سایت-برنامه نویس) حالا من می خوام TSQL ای ینویسم که رشته های قبل و بعد دش را واسم بدست بیاره و اونارو توی دوتا متغیر بزاره
ممنون میشم کمکم کنید

fakhravari
شنبه 31 خرداد 1393, 15:50 عصر
DECLARE @a VARCHAR(50)=N'محمد;حسین;فخراوری;136 9';
WITH MyWords(ranking, word, string) AS(
SELECT 1,
CAST(SUBSTRING(@a, 1, CHARINDEX(';', @a) - 1) AS VARCHAR(25)),STUFF(@a, 1, CHARINDEX(';', @a), '')
UNION ALL
SELECT ranking + 1,
CAST(SUBSTRING(string, 1, CHARINDEX(';', string) - 1) AS VARCHAR(25)),
STUFF(string, 1, CHARINDEX(';', string), '')FROM MyWords WHERE CHARINDEX(';', string) > 0
)
--SELECT ranking, word FROM MyWords;
SELECT TOP(1) STUFF((SELECT ' ' + word FROM MyWords FOR XML PATH('')), 1, 1, '')
FROM MyWords AS x





میتونی از یه فانکشن کمک بگیری مثال در مطلب زیر
http://barnamenevis.org/showthread.php?457090-%D9%86%D8%AD%D9%88%D9%87-%D9%85%D8%B1%D8%AA%D8%A8-%D8%B3%D8%A7%D8%B2%DB%8C-%D8%B3%D8%AA%D9%88%D9%86-%D8%A7%D8%B2-%D9%86%D9%88%D8%B9-%D8%B1%D8%B4%D8%AA%D9%87-%D8%AF%D8%B1-sql

firoozi90
یک شنبه 01 تیر 1393, 07:34 صبح
DECLARE @a VARCHAR(50)=N'محمد;حسین;فخراوری;136 9';
WITH MyWords(ranking, word, string) AS(
SELECT 1,
CAST(SUBSTRING(@a, 1, CHARINDEX(';', @a) - 1) AS VARCHAR(25)),STUFF(@a, 1, CHARINDEX(';', @a), '')
UNION ALL
SELECT ranking + 1,
CAST(SUBSTRING(string, 1, CHARINDEX(';', string) - 1) AS VARCHAR(25)),
STUFF(string, 1, CHARINDEX(';', string), '')FROM MyWords WHERE CHARINDEX(';', string) > 0
)
--SELECT ranking, word FROM MyWords;
SELECT TOP(1) STUFF((SELECT ' ' + word FROM MyWords FOR XML PATH('')), 1, 1, '')
FROM MyWords AS x





میتونی از یه فانکشن کمک بگیری مثال در مطلب زیر
http://barnamenevis.org/showthread.php?457090-%D9%86%D8%AD%D9%88%D9%87-%D9%85%D8%B1%D8%AA%D8%A8-%D8%B3%D8%A7%D8%B2%DB%8C-%D8%B3%D8%AA%D9%88%D9%86-%D8%A7%D8%B2-%D9%86%D9%88%D8%B9-%D8%B1%D8%B4%D8%AA%D9%87-%D8%AF%D8%B1-sql

اگر بخوایم همه مقادیر یک ستون رو تفکیک کنیم چی ؟

firoozi90
یک شنبه 01 تیر 1393, 09:04 صبح
من یه جدول دارم که یکی از فیلدهاش رشته داخلش ذخیره میشه، و رشته ها با دش از هم جدا شده اند ،مثل (سایت-برنامه نویس) حالا من می خوام یه کوئری بگیرم که سمت چپ و راست این دش را واسم برگردونه ،مثلا (سایت) رو توی یه ستون نشون بده و (برنامه نویس) رو توی ستون دیگه

من از کد زیر برای اینکار استفاده کردم

DECLARE @GowTable TABLE
(
Gow nvarchar(200)
)
INSERT INTO @GowTable (Gow)
SELECT GoodsOwner.GoodsOwnerName FROM GoodsOwner

که کد زیر رو توی سلکت استفاده کردم،اما نمی دونم چرا اررور میده ،در ضمن همزمان از چندتا جدول واقعی دیگه هم سلکت کردم
substring(Gow,1,charindex('-',Gow)-1) F1,substring(Gow,charindex('-',Gow)+1,len(Gow)) f2




اینم اررور
Msg 537, Level 16, State 3, Line 11
Invalid length parameter passed to the LEFT or SUBSTRING function.

fakhravari
یک شنبه 01 تیر 1393, 15:37 عصر
SELECT [u], SUBSTRING([u],1,CHARINDEX(';',u,1)-1) AS '1',RIGHT([u], len([u])-CHARINDEX(';',u,1))AS '2' FROM [Administrator]