سوال برنامه نویسی کسی میتونه کمک کند؟
سوالم اینه کد sql که تفریق انجام بده یعنی تاریخ امروز را با تاریخ های دیگه دیتا بیس مقایسه کنه و اونا که اختلافشون سه روزه را بر گدوند چی میشه؟
ممنون میشم کسی میدونه کمک کند
ب
DATEDIFF(datepart, startdate, enddate
مثال کلا دستور تفریق sql همینه؟
1. EXCEPT ( قابل استفاده در نسخه ی 2005 و بالاتر)
2. UNION ALL
3. NOT IN
4. NOT EXISTS
5. LEFT OUTER JOIN
6. OUTER APPLY (قابل استفاده در نسخه ی 2005 و بالاتر)
فرض کنید می خواهیم سطرهای جدول Customers را از سطرهای Employees در بانک Northwind تفریق کنیم. البته با ستون های مشترک (کشور، منطقه و شهر)
روش اول:
در زمان استفاده از عملگر EXCEPT بایستی توجه داشته باشید که تعداد فیلد ها در قسمت target (لیست ستونها) در هر دو کوئری یکسان باشد
بعد از حذف داده های تکراری (با DISTINCT) و ساخت یک ستون عبارتی با مقدار ثابت سطرهای دو کوئری را با یکدیگر اجتماع می کنیم، سپس نتیجه ی حاصل را بر اساس سه ستون مورد نظر گروه بندی می کنیم و بعد از گروه بندی سطرهایی را فیلتر می کنیم که تعداد سطر موجود در هر گروه برابر با 1 بوده و مقدار ستون ثابت K نیز برابر با E باشد.
روش سوم:
همانطور که اشاره شد روش ما بایستی قادر باشد که با یک دستور تمام مقادیر از جمله null ها را با یکدیگر مقایسه کند برای این منظور از تابع COALESCE استفاده می شود. این تابع اولین عبارتی که غیر از null باشد را بر می گرداند. البته به جای آن از تابع ISNULL که ویژه ی SQL Server است نیز می توان استفاده کرد. اگر مقدار برابر با null بود سپس تابع مقدار 1 را بر میگرداند. 1 مقداری است که ممکن نیست نام یک شهر یا کشور باشد. پس هیچ وقت تداخلی ایجاد نمی کند. تمام روش های باقیمانده برای تکامل نیاز به این روش مقایسه دارند که برای خوانایی کد ها از آنها صرف نظر کردم.
اگر قرار بود تنها یک ستون مقایسه شود نیازی نبود که از کوئری تودرتوی وابسته (Correlated Subquery) استفاده کنیم. ولی در اینجا چون نیاز داریم سه ستون را با یکدیگر مقایسه کنیم دو ستون را داخل کوئری مقایسه کرده و یک ستون را خارج از کوئری.
روش چهارم:
با کمک EXISTS Predicate و Correlated Subquery اینکار را پیاده سازی می کنیم.
تنها راه مممکن اینه
1-یک متغیر حاوی تاریخ شمسی معادل تاریخ میلادی فعلی ایجاد کند
2-سه روز قبل تاریخ میلادی را با پارامتر AddDays(-3) بدست بیارین و بعد معادل تاریخ شمسی اون را در یه متغیر رشته ای ذخیره کنید
3-یه Select بنویسید که where اون بشه where dtm<@dtm1 and dtm>@dtm2 برای dtm2 معادل رشته ای تاریخ شمسی جاری سیستم
و برای dtm1 معادل رشته ای تاریخ شمسی سه روز قبل را بفرستین...