View Full Version : عدد در رشته
iranrose63
سه شنبه 10 اردیبهشت 1387, 08:43 صبح
سلام
من يه رشته دارم كه شامل يك سري كاراكتر هاي عددي هم هست مي خوام يك query بنويسم كه در صورتيكه عدد انتهاي رشته بود (يعني بعد از كاراكتر هاي عددي كاراكتر ديگري نبود) رشته را به من نشون بده
مثلا خروجي هاي زير رو داشته باشم
123
123/125/55
3/10
ولي خروجي زير رو نشون نده
/1/2355
در ضمن مي خوام اين كار را با like انجام بدم آيا امكانش هست ي نه
Kamyar.Kimiyabeigi
سه شنبه 10 اردیبهشت 1387, 09:29 صبح
select isnumeric (substring('123/', (len('123/')), 1))
اگر مقدار select بالا صفر باشه یعنی کاراکتر آخر عدد نیست و اگر یک باشه یعنی عدد هست
iranrose63
سه شنبه 10 اردیبهشت 1387, 09:37 صبح
در ضمن مي خوام اين كار را با like انجام بدم
ممنون از اينكه جواب داديد ولي من اين query رو براي استفاده در select يك datatable ميخوام و بايد از like استفاده كنم چون isnumeric را نميشناسه
Kamyar.Kimiyabeigi
سه شنبه 10 اردیبهشت 1387, 09:55 صبح
select isnumeric (substring(fieldname, (len(filedname)), 1))
from tablename
where fieldname like '%%'
Amir_Safideh
سه شنبه 10 اردیبهشت 1387, 10:04 صبح
Select *
From Table1
Where Right(Field_Name,1) in ('1','2','3','4','5','6','7','8','9','0')
-------------
موفق باشید .
iranrose63
سه شنبه 10 اردیبهشت 1387, 10:07 صبح
مثل اينكه نتونستم منظورم رو خوب برسونم
بينيد من مي خوام رشته هايي انتخاب بشن كه ابتداي انها يك سري كاراكتر است بعد يك كاراكتر / و در نهايت يك سري كاراكتر هاي عددي . در واقع اين query رو چندين بار استفاده مي كنم در ابتدا مي خوام رشته هايي انتخاب بشن كه فقط كاراكتر عددي دارند در مرحله بعد رشته هايي كه با اون عدد شروع شدن بعد يك كاراكتر / و با يك سري كارا كتر عددي هم تموم شدند
مي خوام بدونم آيا ميشه با استفاده از دستور like يك سري از اعداد رو فيلتر كرد همون طور كه با استفاده از'[like '[0-9 مي توان فقط يك كاراكتر عددي رو انتخاب كرد
select mystring from mytable where mystring like format+'/'+???(number)???
Kamyar.Kimiyabeigi
سه شنبه 10 اردیبهشت 1387, 10:14 صبح
همین کدی که Amir_Safideh نوشتن که درسته. پس مشکل کجاست؟
Select *
From dbo.Orders
Where Right('123/',1) in ('1','2','3','4','5','6','7','8','9','0')
Select *
From dbo.Orders
Where Right('12/3',1) in ('1','2','3','4','5','6','7','8','9','0')
iranrose63
سه شنبه 10 اردیبهشت 1387, 10:20 صبح
مشكل اينجاست كه ممكنه format كه من تو كدم نوشتم به صورت 123/23 باشه و من بخوام رشته هايي رو پيدا كنم كه با /123/23 شروع شدن و بعد از اون فقط كاراكتر هاي عددي داريم نه اينكه فقط كاراكتر آخر يك كاراكتر عددي باشه , مي خوام خروجي 12/123/23 و همچنين 5 /123/23 رو داشته باشم ولي خروجي 12/12/123/23 يا 5/6/123/23 رو نداشته باشم
اميدوارم منظورم رو رسونده باشم
Kamyar.Kimiyabeigi
سه شنبه 10 اردیبهشت 1387, 10:49 صبح
Select *
From dbo.Orders
Where (Right(fieldname,1) in ('1','2','3','4','5','6','7','8','9','0')) and
(fieldname like '%%')
من فکر کنم که شما میخواین از like استفاده کنین که به صورت بالا مقدوره. امیدوارم که مشکلتون حل شده باشه
iranrose63
سه شنبه 10 اردیبهشت 1387, 11:01 صبح
نه بازم متوجه منظور من نشديد query شما تمام فيلدهايي را كه اخرين كاراكتر اونها يك كاراكتر عددي باشه برميگردونه ولي من ميخوام بعد از يك فرمت خاص فقط كاراكتر هاي عددي باشه نه اينكه آخرين كاراكتر يك كاراكتر عددي باشه اگه يه بار ديگه پست 8 رو نگاه كنيد شايد متوجه منظور من بشيد
Kamyar.Kimiyabeigi
سه شنبه 10 اردیبهشت 1387, 11:11 صبح
پس شما به صورت stored procedure بنویسید
declare @format nvarchar(50)
set @format = 'value'
Select *
From dbo.Orders
Where (substring(fieldname, len(@format) + 1, len(fieldname)) in ('1','2','3','4','5','6','7','8','9','0')) and
(fieldname like '%%')
iranrose63
سه شنبه 10 اردیبهشت 1387, 11:25 صبح
دوست عزيز خدمتتون كه عرض كردم من اين فيلتر رو براي استفاده در select يك datatable توي برنامم مي خوام كه با #c مينويسم در اونجا من نمي تونم يك sp تعريف كنم و فقط اجازه يك استفاده از يك سري توابع و عملگرهاي خاص مثل link رو دارم يعني مثل همون چيزي كه تو پست 6 نوشتم نه بيشتر از اون
Amir_Safideh
سه شنبه 10 اردیبهشت 1387, 11:31 صبح
دوست عزيز خدمتتون كه عرض كردم من اين فيلتر رو براي استفاده در select يك datatable توي برنامم مي خوام كه با #c مينويسم در اونجا من نمي تونم يك sp تعريف كنم و فقط اجازه يك استفاده از يك سري توابع و عملگرهاي خاص مثل link رو دارم يعني مثل همون چيزي كه تو پست 6 نوشتم نه بيشتر از اون
دوست عزیز وقتی که سوالتون رو در بخش SQL Server مطرح میکنید دیگه نباید انتظار داشته باشید که جواب سوال رو بر اساس زبان برنامه نویسی شما بدن . خوب دوستان لطف کردن و دستور رو براتون گذاشتن شما همون رو بنا به نیاز خودتون تغیر بدید . شاید بهتر باشه که سوالتون در بخش زبان #C مطرح کنید .
-------------
موفق باشید .
iranrose63
سه شنبه 10 اردیبهشت 1387, 11:44 صبح
دوست عزیز وقتی که سوالتون رو در بخش SQL Server مطرح میکنید دیگه نباید انتظار داشته باشید که جواب سوال رو بر اساس زبان برنامه نویسی شما بدن . خوب دوستان لطف کردن و دستور رو براتون گذاشتن شما همون رو بنا به نیاز خودتون تغیر بدید
من گفتم كه query رو بايد فقط با استفاده از دستور like بنويسم اون توضيحاتي هم كه دادم براي اين بود كه بدونيد چرا مجبورم اين كار را بكنم در ضمن حتي با استفاده از جواب هاي داده شده نتونستم اون رشته هاي رو كه مي خوام فيلتر كنم
حالا ايا راهي هست كه من فقط بتونم با استفاده از Like فيلتر مورد نظرم رو انجام بدم
Kamyar.Kimiyabeigi
سه شنبه 10 اردیبهشت 1387, 11:56 صبح
من گفتم كه query رو بايد فقط با استفاده از دستور like بنويسم اون توضيحاتي هم كه دادم براي اين بود كه بدونيد چرا مجبورم اين كار را بكنم در ضمن حتي با استفاده از جواب هاي داده شده نتونستم اون رشته هاي رو كه مي خوام فيلتر كنم
حالا ايا راهي هست كه من فقط بتونم با استفاده از Like فيلتر مورد نظرم رو انجام بدم
منم براتون با استفاده ازlike نوشتم پست شماره 11. در ضمن فکر نمیکنم #C اینقدرناتوان باشه که نتونین دراون از sp استفاده کنین
Amir_Safideh
سه شنبه 10 اردیبهشت 1387, 12:59 عصر
مشكل اينجاست كه ممكنه format كه من تو كدم نوشتم به صورت 123/23 باشه و من بخوام رشته هايي رو پيدا كنم كه با /123/23 شروع شدن و بعد از اون فقط كاراكتر هاي عددي داريم نه اينكه فقط كاراكتر آخر يك كاراكتر عددي باشه , مي خوام خروجي 12/123/23 و همچنين 5 /123/23 رو داشته باشم ولي خروجي 12/12/123/23 يا 5/6/123/23 رو نداشته باشم
اميدوارم منظورم رو رسونده باشم
شما برای اینکار باید اول یه منطق درست برای شرطتون داشته باشید . مثلا اینکه به شرط اینکه تعداد اسلشهای رشته دوتا باشه و بیشتر از دوتا نباشه و انتهای رشته به یک کاراکتر عددی ختم بشه . و یا اینکه به شرط اینکه کاراکترهای آغازین رشته برابر با یک مقدار خاص باشه ( 123/23) و انتهای اون یک کاراکتر عددی .
اگر کاراکترهای آغازین رو شما مشخص میکنید در اونصورت بهتره که اون رو به صورت یک پارامتر به کوئری ارسال کنید و کاراکتر انتهائی رو هم با یک Like چک کنید .
Select *
From Table3
Where (Left(LTrim(Test),Len(@Param))= @Param) And (Right(RTrim(Test),1) Like'[0-9]')
And (Len(LTrim(Test)) = Len(@Param)+1)
در این مثال شما میتونید مقدار پارامتر رو خودتون مشخص کنید و انتهای رشته هم که با دستور Like چک میشه . مثلا شما اگر پارامتر رو با مقدار /123/23 ارسال کنید در اونصورت رکوردهائی لیست میشن که شامل پارامتر ارسالی در ابتدا بعلاوه یک کاراکتر عددی در انتها باشن . البته این دستور زمانی به درد شما میخواره که مقدار اولیه ثابت باشه یا توسط شما تعریف بشه .
-------------
موفق باشید .
iranrose63
سه شنبه 10 اردیبهشت 1387, 13:42 عصر
query شما رو تست كردم فرض كنيد ستون test شامل داده هاي زير باشه
1/0
8/0
12/0
12/1/0
و Param@ هم برابر /0 باشه
با QUERY شما فقط ميشه دو مورد اول رو SELECT كرد ولي من سه تاي اول رو مي خوام
iranrose63
سه شنبه 10 اردیبهشت 1387, 13:46 عصر
منم براتون با استفاده ازlike نوشتم پست شماره 11. در ضمن فکر نمیکنم #C اینقدرناتوان باشه که نتونین دراون از sp استفاده کنین
من query شما رو تست كردم ولي جواب اون چيزي نيست كه من مي خوام
در مورد قدرت #c هم بايد بگم #c خيلي تواناست مشكل من با select در datatable هست كه فقط يك سري دستورات خاص رو مي گيره نه با #c شايد راه بهتري هم باشه ولي من نمي دونم
از اينكه وقت گذاشتيد ممنون
Amir_Safideh
سه شنبه 10 اردیبهشت 1387, 14:15 عصر
query شما رو تست كردم فرض كنيد ستون test شامل داده هاي زير باشه
1/0
8/0
12/0
12/1/0
و Param@ هم برابر /0 باشه
با QUERY شما فقط ميشه دو مورد اول رو SELECT كرد ولي من سه تاي اول رو مي خوام
در این صورت کد رو به صورت زیر اصلاح کن :
Select *
From Table3
Where (Left(LTrim(Test),Len(@Param))= @Param) And (Right(RTrim(Test),1) Like'[0-9]')
یعنی فقط آخرین شرط رو حذف کن .
------------
موفق باشید .
iranrose63
چهارشنبه 11 اردیبهشت 1387, 09:32 صبح
با اين QUERY هم مشكل من حل نميشه چون در اين صورت تمام رشته هايي كه تو پست قبلم گفتم تو خروجي ديده ميشن نه فقط سه تاي اولي
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.