PDA

View Full Version : کوتاه ترین حالت برای این دستور چیه؟



Aria.Paradise
چهارشنبه 14 تیر 1391, 12:24 عصر
سلام .کوتاه ترین حالت یا بهترین روش نوشتن این دستور چطوریه؟


SELECT *
FROM dbo.Words
WHERE (date_delete BETWEEN '2011-09-02 ' AND '2013-03-01 ') OR (Date_Insert BETWEEN '2011-09-02 ' AND '2013-03-01 ') or
(date_Update BETWEEN '2011-09-02 ' AND '2013-03-01 ')

اگر توجه کنین تاریخا یکی هستن، date_delete ، Date_Insert و date_Update هم اسم فیلدای جدولن

پیشاپش ممنون به خاطر توجه و راهنمایی تون

baktash.n81@gmail.com
چهارشنبه 14 تیر 1391, 13:25 عصر
چون برای هر مقایسه رشته رو به تاریخ تبدیل می کنه ... می تونید یه متغیر از نوع datetime تعریف کنید و مقدار رو درون اون بزارید از اون متغیر در دستورتون استفاده کنید.

حمیدرضاصادقیان
چهارشنبه 14 تیر 1391, 13:41 عصر
سلام.
البته این طراحی به نظرم میتونه بهینه تر بشه.
تاریخ کلا در یک جدول قرار بگیره و با یک فیلد نوع عمل مشخص بشه.
با این روش با یک شرط ساده و Join بین دو جدول خیلی راحت میتونید جستجوتون رو انجام بدید. اگر میخواهید همه تاریخ ها در یک محدوده معین انجام بشه.

Aria.Paradise
چهارشنبه 14 تیر 1391, 14:33 عصر
خود جدول بیشتر از 40 تا فیلد داره ، اسم فیلدا رو اینجا عوض کردم تا راحت تر قابل درک باشن ، کارایشون چیز دیگه ایه ، اگر بتونین همین کد سادش کنین ممنون می شم.
یه نمونه کد می ذارم تا منظورمو بهتر متوجه بشین
کد اولیه:
SELECT *
FROM dbo.Words
WHERE (Show = '1') AND (Date_Insert >= '2011-09-02 ') AND (Username = 'Mahdi') AND (Group_Name = 'EC-Lesson 2-Color') OR
(Show = '2') AND (Date_Insert >= '2011-09-02 ') AND (Username = 'Mahdi') AND (Group_Name = 'EC-Lesson 2-Color') OR
((Show = '3') AND (Date_Insert >= '2011-09-02 ') AND (Username = 'Mahdi') AND (Group_Name = 'EC-Lesson 2-Color


کد ساده شده:

SELECT *
FROM dbo.Words
WHERE (Date_Insert >= '2011-09-02 ') AND (Username = 'Mahdi') AND (Group_Name = 'EC-Lesson 2-Color') AND (Show IN (1, 2, 3))


البته به جای 1 ، 2 ، 3 شما یه مقدار رشته ای رو فرض کنید چون اگر فقط عددی بود راه ساده تریم هست.

می خوام اون کدم مثل این نمونه ساده شد ، البته روش ساده کردنش برام مهمه چون کد اصلی چند خط ولی اگر اون کد ساده بشه می تونم با همون روش کد اصلیم ساده کنم ، راهی بلدین؟

Aria.Paradise
پنج شنبه 15 تیر 1391, 23:22 عصر
کسی جوابی به ذهنش نرسید؟

ma_barnamenevis
شنبه 17 تیر 1391, 10:29 صبح
ببینید شما در sample تون فقط یک فیلد زمان را درگیر کرده اید برای همین تونستین به اون شکل ساده کنید ، ولی در این مورد بهر حال هر سه فیلد باید درگیر شرط شوند فقط می تونید جمع و جور ترش کنید اونم با دادن محدوه مورد نظر به یک متغییر :
declare @dateReng varchar(50)
set @dateReng = 'BETWEEN 2011-09-02 AND 2013-03-01 '

و سپس الحاق این رشته به سه شرط مورد نظر