هوش تجاری (Business Intelligence)

هوش تجاری (Business Intelligence)

به اشتراک بگذاریم برای یادگیری، یاد بگیریم برای به اشتراک گذاری
هوش تجاری (Business Intelligence)

هوش تجاری (Business Intelligence)

به اشتراک بگذاریم برای یادگیری، یاد بگیریم برای به اشتراک گذاری

آشنایی با INTERSECT و EXCEPT

معمولا برای مقایسه رکوردهای دو جدول از کوئری‌های پیچیده استفاده می‌شود. دو دستور INTERSECT و EXCEPT نتایج مقایسه رکوردهای دو کوئری را بدون نمایش رکوردهای تکراری نمایش می‌دهد.

EXCEPT رکوردهایی که در کوئری اول (سمت چپ) وجود دارد و در کوئری دوم (سمت راست) وجود ندارد را نمایش می‌دهد.به زبان ساده‌تر، رکوردهایی که در اولی هست و در دومی نیست.

INTERSECT رکوردهایی که در هر دو کوئری مشترک هستند را نمایش می‌دهد.

به دو کوئری زیر توجه کنید  

 

 

USE AdventureWorks;

GO

SELECT ProductID

FROM Production.Product

INTERSECT

SELECT ProductID

FROM Production.WorkOrder ;

--Result: 238 Rows (products that have work orders)

 

در دو جدول  Product و WorkOrder تعداد 238 رکورد وجود دارد که ProductID آن‌ها مشترک است.  

 

USE AdventureWorks;

GO

SELECT ProductID

FROM Production.Product

EXCEPT

SELECT ProductID

FROM Production.WorkOrder ;

--Result: 266 Rows (products without work orders)

 

تعداد 266 رکورد وجود دارد که ProductID آن‌ها در جدول Product (اولی) وجود دارد و در جدول WorkOrder (دومی) وجود ندارد. 

جهت دریافت و نصب بانک اطلاعاتی AdventureWorks  به اینجا مراجعه کنید.

منبع:

 http://msdn.microsoft.com/en-us/library/ms188055(v=sql.100).aspx

پیدا کردن آخرین رقم غیرصفر

گاهی اوقات ممکن است نیاز داشته باشیم در یک عدد،  آخرین رقم (ارقام) غیر صفر را بدست بیاوریم. برای مثال دو عدد 185005035 و 56056502 را در نظر بگیرید، با اجرای کوئری زیر نتیجه عدد اول برابر 35 و نتیجه عدد دوم 2 می‌باشد.


declare @t table (num int)
insert into @t
select 185005035 union all
select 56056502
select
    num,
    right(num,case when string_len=0 then total_len else string_len-1 end) as new_num
from
(
    select     num,len(num) as total_len,
        patindex('%[0]%',cast(reverse(num) as varchar(100))) as string_len
    from     @t
) as t

تولید اعداد تصادفی توسط یک SP ساده!

توسط رویه زیر می‌توانید n عدد تصادفی در یک باز مشخص بدست آورید.



Create Procedure RandomNumbers

(

            @min bigint

            ,@max bigint

            ,@count int

)

as

Set Nocount On


Declare @t table (num bigint)

Declare @start bigint

Declare @End bigint

 

While @min<=@max

Begin

            Insert into @t values(@min)

            set @min=@min+1

End

Set Rowcount @count

Select num from @t order by newid()

Set Rowcount 0


برای اجرا کردن رویه ابتدا و انتهای بازه و تعداد اعداد تصادفی را مشخص کنید.


Exec RandomNumbers 100,300,10

تبدیل تاریخ شمسی به میلادی،میلادی به شمسی ومیلادی به قمری در SQL

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


لازم به ذکر است که تابع تبدیل تاریخ میلادی به شمسی توسط آقای رضا راد نوشته شده است.


توابع تبدیل تاریخ میلادی به شمسی و شمسی به میلادی را از اینجا دریافت کنید. 

پس از دانلود و اجرای کوئری ها، از طریق دستورات زیر میتوانید تبدیل تارخ میلادی به شمسی و شمسی به میلادی را انجام دهید.


از کوئری‌ زیر برای مشاهده نتیجه استفاده کنید.

select dbo.GregorianToPersian('1980/01/01')

select dbo.ShamsitoMiladi('1358/10/11')

تبدیل تاریخ میلادی به قمری

 

از دستور زیر برای تبدلی تاریخ میلادی به قمری استفاده کنید.

 

SELECT CONVERT (nvarchar(30),GETDATE(),130) as Date

 

برای بدست آوردن سن از دستور زیر استفاده کنید.

 

SELECT DateDiff(yy , (select  dbo.ShamsitoMiladi ('1365/01/01') ), GetDate())