PDA

View Full Version : سوال: تبدیل مقادیر در هنگام واکشی(select)



baran_mehr
پنج شنبه 30 دی 1389, 09:22 صبح
سلام به همه دوستان عزیز
من تو درون فیلدها اطلاعات رو به صورت باینری (0و1) ذخیره کردم
میخوام بدونم میتونم هنگام select بیام طوری دستورمو بنویسم که خودش اطلاعات رو برگردونه به حالت اول:متفکر:

حمیدرضاصادقیان
پنج شنبه 30 دی 1389, 16:53 عصر
سلام.
بله شما میتونید با استفاده از دستور Case در داخل select هر چیزی رو نمایش بدید.
مثال :


select id,case When Typ=0 then 'بدهکار' else 'بستانکار' end as TypeSanad from Table1

baran_mehr
جمعه 01 بهمن 1389, 13:46 عصر
سلام اقای صادقیان
نه منظورم این نبود
فرض کنید من یه رشته دارم به صورت 001011101011011 و میخوام مثلا 4 تا 4 تا جداشون کنیم و معادل هرکدومشون رو بزارم
مثلا اگر 0010 بود بزاره A و ..
برای جدا کردن هم از ابتدای این رشته باینری شروع کنه
منظورم این بود

Modifier
جمعه 01 بهمن 1389, 13:57 عصر
سلام

فرض کنید من یه رشته دارم به صورت 001011101011011 و میخوام مثلا 4 تا 4 تا جداشون کنیم و معادل هرکدومشون رو بزارم
مثلا اگر 0010 بود بزاره A و ..

من اینطور فکر میکنم که احتمالا چیزی نیست که این رشته کد باینری رو بهش بدی و مقدار اولش رو برگردونه ...
فکر کنم بهتره یه Function بنویسی که که رشته رو بهش پاس بدی و با فرمتی که میخوای پردازشش کنی...حالا چه توی Sql Server یا ....

baran_mehr
جمعه 01 بهمن 1389, 17:13 عصر
من این کار رو دارم انجام میدوم تو ویژوال
میخوام تو sql این اتفاق بیفته حالا با تابع یا هر چیز دیگه ای
فقط میخوام قدرت اینو داشته باشه که وقتی select رو مینویسم بتونه کارهایی که میخوام رو انجام بده و نتیجه رو برگردونه

حمیدرضاصادقیان
جمعه 01 بهمن 1389, 22:50 عصر
سلام. شما باید یک تابع بنویسی که ورودیش یک مقدار رشته ای باشه که مقدار فیلدت رو بدی.
در داخل اون یک متغیر تعریف میکنی و طول رشته رو بهش پاس میدی.
در داخل یک حلقه با استفاده از Substring میتونی این رشته رو به صورت 4 رقم 4رقم جدا کرده و خروجی مورد نظر رو در یک رشته دیگه ذخیره کنی.
در نهایت نتیجه خروجی تابع شما میشه مقدار نهایی تولید شده.

baran_mehr
شنبه 02 بهمن 1389, 11:08 صبح
خوب فرض کنید یک تابع نوشتم با نام Dcode که ورودیش یک رشته باینری و خروجیش یک رشته تبدیل شده بود
حالا چطور باید از این تابع داخل select استفاده کنم!!

ASKaffash
شنبه 02 بهمن 1389, 11:55 صبح
سلام
اگر decode شما برای موضوع امنیتی است اصلا الگوریتم را سمت SQLServer ننویسید در غیر اینصورت چند روش وجود دارد
1- با استفاده از فیلد محاسباتی
2- با استفاده از تابع مثلا بنام Dc و روش استفاده :
Select X=dbo.dc(FldName),... From T

baran_mehr
شنبه 02 بهمن 1389, 13:08 عصر
بله برای امنیت اطلاعات دارم این کار رو میکنم
میخوام بدونم اگر این کار رو طرف sql بنویسم سرعت من بالاتر میره یا نه؟
و آیا میشه این تابع رو داخل برنامه vb نوشت و توی همون vb زمانی که دارم دستور select رو بنویسم اون تابع رو فراخونی کنم.
الان من مجبورم اطلاعات رو داخل گرید بیارم و تک تک سطر و ستون ها رو تبدیل به رشته اصلی کنم، فکر کنم اطلاعات که حجمش زیاد بشه این روش چندان کارا نباشه

ASKaffash
شنبه 02 بهمن 1389, 13:15 عصر
سلام
بستگی به Client ها دارد اگر Client ها خوب باشند در سمت Vb سرعت بیشتر است
اگر بانک اکسس بود می شد ولی در بانک SQLServer شما تابع درون زبان برنامه نویسی را نمی توانید به خورد SQLServer دهید
از گرید VB.NET استفاده می کنید ؟

ricky22
شنبه 02 بهمن 1389, 17:22 عصر
از CLR Integration هم می تونید استفاده کنید.

baran_mehr
شنبه 02 بهمن 1389, 21:34 عصر
بستگی به Client ها دارد اگر Client ها خوب باشند در سمت Vb سرعت بیشتر است
منظور از خوب بودن سرعت دستگاه هست؟

اگر بانک اکسس بود می شد ولی در بانک SQLServer شما تابع درون زبان برنامه نویسی را نمی توانید به خورد SQLServer دهید
منظورم این نیست که تابع رو که تو vb نوشتم تو sqlserver فراخونی کنم میخوام تو همون vb یه تابعی رو که نوشتم تو دستور select که تو همون vb هست بدوم، منظورم زمانی هست که با کد دارم به بانک وصل میشم

از گرید VB.NET استفاده می کنید ؟
از گرید برای نمایش استفاده میکنم اما داده هارو قبل از اتصال به گرید توی خود datatable تغییر میدم

از CLR Integration هم می تونید استفاده کنید.
نمیدونم چی هست

ASKaffash
یک شنبه 03 بهمن 1389, 07:54 صبح
سلام
بهترین روش همان است که در یک فیلد جدا در DataTable برگشتی مقدار را محاسبه می کنید (پردازش سمت Client و روی Ram در حال انجام است)