PDA

View Full Version : جستجو فیلد قیمت با ویرگول



hamkelasii
شنبه 26 مهر 1393, 16:23 عصر
با سلام . متاسفانه من مقدار قیمت کالاهای برنامه ام را با همون ویرگول جدا کننده سه رقم در پایگاه داده ام ذخیره کردم
مثلا : 3,000,000
حالا وقتی می خوام ما بین دو قیمت (مثلا بین 3000 تا 300000) رو با دستور BETWEEN جستجو کنم ، خروجی دستور سلکت درست نمیاد .
یعنی وقتی هر دو قیمت تعداد ارقامشون یکی هستن (مثلا بین 300 تا 900) جواب درست میاد ولی وقتی می خوای بین مثلا 300 تا 1200 رو جستجو کنی ، نمیاره
کسی راه حلی واسه حل این مشکل من داره ؟

jir_jir_jir
شنبه 26 مهر 1393, 16:27 عصر
دوست من شما می تونی اطلاعاتتو بریزی تو dataset بعد با توجه به تعداد رکوردهات یه حلقه بزاری و مقایسه رو انجام بدی البته با دستور کار روی رشته های ویرگول رو هم موقع مقایسه حذف کنی
اگر متوجه نشدی بگو تا کد بزارم برات

hamkelasii
شنبه 26 مهر 1393, 16:33 عصر
ببینید ، من اول باید از دیتابیس خروجی بگیرم که بعد بشه با توابع روی رشته ها ویرگول رو حذف کنم (که دیگه اون موقع نیازی بهش نیست) .

juza66
شنبه 26 مهر 1393, 16:41 عصر
تکس باکس رو هم بذار با ویرگول باشه

مثلا کاربر بگه 3.000 تا 30.000.000 ...

jir_jir_jir
شنبه 26 مهر 1393, 16:43 عصر
دوست من شما باید این جستجو رو سمت بانک انجام بدی یا از طریق برنامه ای می نویسی یا باید به مقداری که می خوای با توجه به اون جستجو انجام بدی ویرگول اضافه کنی یا از مقادیر تو بانکت ویرگول رو حذف کنی

hamkelasii
شنبه 26 مهر 1393, 16:49 عصر
چه با ویرگول و چه بدون ویرگول ، وقتی تعداد ارقام جستجوم برابر نیست ، جواب درست نمیاد
حتی اینطوری هم تست کردم :
SELECT PayehPrice
FROM dbo.Tbl_Piece
WHERE (PayehPrice >= '130000') AND (PayehPrice <= '2000000')

جواب نمی ده . مگه اینکه هر دوتاشون تعداد ارقامشون یکی باشه
مثلا وقتی می گی بین 130000 تا 300000 جواب می ده لامصب

jir_jir_jir
شنبه 26 مهر 1393, 16:54 عصر
دوست من شما یه مبلغ ذخیره کردی مثلا 30،000 و می خوای با 30000 جستجو روش انجام بدی خوب وقتی ویرگول حذف بشه یا اضافه تعداد ارقام هم یکی می شه شما تست کردی ویرگول رو به مقدار مورد جستجو اضافه کنی ؟ اگر بله کدتو بزار شاید ایراد داشته باشه ( باید 3 رقم ، 3 رقم جدا کنی )

hamkelasii
شنبه 26 مهر 1393, 16:59 عصر
SELECT PayehPrice
FROM dbo.Tbl_Piece
WHERE (PayehPrice >= '318,000') AND (PayehPrice <= '1,646,000')

جواب : تهی

SELECT PayehPrice
FROM dbo.Tbl_Piece
WHERE (PayehPrice BETWEEN '318,000' AND '1,646,000')
جواب : تهی

SELECT PayehPrice
FROM dbo.Tbl_Piece
WHERE (PayehPrice BETWEEN '318000' AND '1646000')

جواب : تهی

SELECT PayehPrice
FROM dbo.Tbl_Piece
WHERE (PayehPrice >= '318000') AND (PayehPrice <= '1646000')
جواب : تهی

فقط فقط فقط
SELECT PayehPrice
FROM dbo.Tbl_Piece
WHERE (PayehPrice >= '318000') AND (PayehPrice <= '518000')

چون تعداد ارقامشون یکی بود : جواب درست

jir_jir_jir
شنبه 26 مهر 1393, 17:01 عصر
یه مثال کوچیک برای می نویسم انشااله که مشگل حل بشه

hamkelasii
شنبه 26 مهر 1393, 17:03 عصر
من نمی تونم بانک رو عوض کنم . چون مشتریم متاسفانه اطلاعاتش رو ثبت کرده و تعداد رکوردهام هم کم نیست .

gerdioz
شنبه 26 مهر 1393, 17:06 عصر
از نظر دستوری مشکل نداره چون من شبیه به اون رو زدم
نوع PayehPrice تو بانک چیه ؟

hamkelasii
شنبه 26 مهر 1393, 17:13 عصر
از نظر دستوری مشکل نداره چون من شبیه به اون رو زدم
نوع PayehPrice تو بانک چیه ؟

nvarchar هستش

gerdioz
شنبه 26 مهر 1393, 17:30 عصر
دستور کوئری تو تو خود اس کیو ال اجرا کن ببین چ خطایی میده

hamkelasii
شنبه 26 مهر 1393, 17:43 عصر
خطااااااااااااااااااااااا ا ندارم
فقط داده های خروجی سلکتم درست نیست

danialafshari
شنبه 26 مهر 1393, 17:44 عصر
با سلام
چرا از int استفاده نمی کنید؟
فیلد درون بانک رو به int تبدیل کنید
برای نمایش هم می تونید همون int رو 3 رقم 3 رقم جدا کنید
موفق باشید

hamkelasii
شنبه 26 مهر 1393, 17:44 عصر
یکی فقط یه دستور سلکت بده ، که فرقی نداره توش ویرگول باشه یا نباشه ، فقط بتونه از بین داده های ثبت شده من ، تو جدلم که با ویرگول هستن ، خروجی صحیح رو بده
همین

hamkelasii
شنبه 26 مهر 1393, 17:46 عصر
با سلام
چرا از int استفاده نمی کنید؟
فیلد درون بانک رو به int تبدیل کنید
برای نمایش هم می تونید همون int رو 3 رقم 3 رقم جدا کنید
موفق باشید

یعنی چی ؟؟؟؟ خوب من که گفتم دیگه نمی تونم نوع فیلد جدولم رو تغییر بدم
چون برنامه ام دست مشتری هستش و داده هاش رو ثبت کرده
رکوردهای ثبت شده به دلیل تعداد زیادشون ، دیگه غیر قابل ویرایش هست

jir_jir_jir
شنبه 26 مهر 1393, 18:04 عصر
دوست من دارم برات می نویستم یه نمونه فقط لطف کن بگو می خوای بین محدوده دو تا قیمت برای کوئری بگیره بر اساس یه قیمت خاص

hamkelasii
شنبه 26 مهر 1393, 18:43 عصر
دوست من دارم برات می نویستم یه نمونه فقط لطف کن بگو می خوای بین محدوده دو تا قیمت برای کوئری بگیره بر اساس یه قیمت خاص

ممنون از لطفتون
قراره کاربر ، تو دو تا تکست باکس ، دو قیمت وارد کنه . ما بین این دو قیمت هر چی هست برام نشون بده

محمد آشتیانی
شنبه 26 مهر 1393, 19:18 عصر
دوست عزیز بگذریم که اشتباه کردی و از نوع int استفاده نکردی
شما با یه کوئری ساده اطلاعات قبلی رو اصلاح کن و برنامت رو هم طوری تغییر بده که بدون جداکننده سه رقمی ذخیره کنه.


UPDATE yourtable SET field = REPLACE(field,',','')

اطلاعات موجود اینجوری به راحتی اصلاح میشه و کوئریها درست کار میکنن

موفق باشید

hamkelasii
شنبه 26 مهر 1393, 19:49 عصر
دوست عزیز بگذریم که اشتباه کردی و از نوع int استفاده نکردی
شما با یه کوئری ساده اطلاعات قبلی رو اصلاح کن و برنامت رو هم طوری تغییر بده که بدون جداکننده سه رقمی ذخیره کنه.


UPDATE yourtable SET field = REPLACE(field,',','')

اطلاعات موجود اینجوری به راحتی اصلاح میشه و کوئریها درست کار میکنن

موفق باشید

نمیشه ، اخه از این اطلاعات دیتابیس ، تو سایت که با asp.net ساختم استفاده می شه .
نمی دونم asp کار کردین یا نه ، ولی اونجا دیگه تو لیبل نمی شه قیمت خونده شده رو سه رقم سه رقم جدا کنم آخه

ghasem110deh
یک شنبه 07 دی 1393, 16:28 عصر
با سلام
چرا از int استفاده نمی کنید؟
فیلد درون بانک رو به int تبدیل کنید
برای نمایش هم می تونید همون int رو 3 رقم 3 رقم جدا کنید
موفق باشید

سلام
من از int استفاده کردم ولی باز همین مشکل توی جستجو رو دارم و مجبور شدم ویرگول رو وقتی جستجو رو براساس مقدار فاکتور بزنم حذف کنم ...
راهکار شما چیه که باهمون ویرگول هم سرچ میکنه ؟

hamid_hr
یک شنبه 07 دی 1393, 16:42 عصر
ببین این جواب میده



SELECT PayehPrice FROM dbo.Tbl_Piece
WHERE CONVERT(INT, REPLACE(PayehPrice, ',', '')) BETWEEN '318000' AND '1646000'

ghasem110deh
یک شنبه 07 دی 1393, 16:57 عصر
ممنون ...
این درسته :)
کاشکی اینجا (فروم) هم گزینه بهترین پاسخ داشت