USP_CURRENCYEXCHANGERATE_GETAVAILABLERATES
Returns a list of exchange rates from a given currency to another.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@FROMCURRENCYID | uniqueidentifier | IN | |
@TOCURRENCYID | uniqueidentifier | IN | |
@TYPECODE | tinyint | IN | |
@ASOFDATE | datetime | IN | |
@INCLUDESPOTRATE | bit | IN | |
@CURRENTEXCHANGERATEID | uniqueidentifier | IN |
Definition
Copy
CREATE procedure dbo.USP_CURRENCYEXCHANGERATE_GETAVAILABLERATES
(
@FROMCURRENCYID uniqueidentifier,
@TOCURRENCYID uniqueidentifier,
@TYPECODE tinyint,
@ASOFDATE datetime,
@INCLUDESPOTRATE bit,
@CURRENTEXCHANGERATEID uniqueidentifier
) as
set nocount on;
declare @DATEWITHTIMEOFFSET datetimeoffset;
if @ASOFDATE is not null
begin
declare @DATE datetime;
set @DATE = @ASOFDATE;
--If the date does not have a time component, use the latest time
--so that the latest exchange rate for this date will be used.
if @DATE = dbo.UFN_DATE_GETEARLIESTTIME(@DATE)
set @DATE = dbo.UFN_DATE_GETLATESTTIME(@DATE);
set @DATEWITHTIMEOFFSET = dbo.UFN_TIMEZONEENTRY_GETSYSTEMDEFAULTDATEWITHTIMEOFFSET(@DATE, 0);
end
if @INCLUDESPOTRATE is null
set @INCLUDESPOTRATE = 0;
declare @SPOTRATEID uniqueidentifier;
set @SPOTRATEID = N'00000000-0000-0000-0000-000000000001';
declare @SPOTRATELABEL nvarchar(120);
set @SPOTRATELABEL = N'Spot rate';
select
CURRENCYEXCHANGERATERANKED.ID,
CURRENCYEXCHANGERATERANKED.SOURCECODEID,
convert(datetime,CURRENCYEXCHANGERATERANKED.ASOFDATE) as ASOFDATE,
CURRENCYEXCHANGERATERANKED.DATEADDED,
CURRENCYEXCHANGERATERANKED.SOURCECODEDESCRIPTION,
CURRENCYEXCHANGERATERANKED.ISSPOTRATE,
CURRENCYEXCHANGERATERANKED.RATERANK,
CURRENCYEXCHANGERATERANKED.TIMEZONEDISPLAYNAME
from
(
select
CURRENCYEXCHANGERATE.ID,
CURRENCYEXCHANGERATE.SOURCECODEID,
CURRENCYEXCHANGERATE.ASOFDATE,
CURRENCYEXCHANGERATE.DATEADDED,
CURRENCYEXCHANGERATESOURCECODE.[DESCRIPTION] SOURCECODEDESCRIPTION,
cast(0 as bit) ISSPOTRATE,
rank()
over
(
partition by
CURRENCYEXCHANGERATE.SOURCECODEID
order by
CURRENCYEXCHANGERATE.ASOFDATE desc, CURRENCYEXCHANGERATE.DATEADDED desc, CURRENCYEXCHANGERATE.DATECHANGED desc, CURRENCYEXCHANGERATE.RATE
) as RATERANK,
TIMEZONEENTRY.NAME TIMEZONEDISPLAYNAME
from
dbo.CURRENCYEXCHANGERATE
left join dbo.CURRENCYEXCHANGERATESOURCECODE on CURRENCYEXCHANGERATESOURCECODE.ID = CURRENCYEXCHANGERATE.SOURCECODEID
left join dbo.TIMEZONEENTRY on TIMEZONEENTRY.ID = CURRENCYEXCHANGERATE.TIMEZONEENTRYID
where
(@FROMCURRENCYID is null or @FROMCURRENCYID = CURRENCYEXCHANGERATE.FROMCURRENCYID)
and (@TOCURRENCYID is null or @TOCURRENCYID = CURRENCYEXCHANGERATE.TOCURRENCYID)
and ((CURRENCYEXCHANGERATE.TYPECODE = 0 and @TYPECODE = 0)
or (CURRENCYEXCHANGERATE.TYPECODE in (0,1) and @TYPECODE = 1))
and (CURRENCYEXCHANGERATE.ASOFDATE <= @DATEWITHTIMEOFFSET)
and (CURRENCYEXCHANGERATE.EXPIRATIONDATE is null or CURRENCYEXCHANGERATE.EXPIRATIONDATE >= @DATEWITHTIMEOFFSET)
union all
select
@SPOTRATEID,
null,
null,
null,
null,
cast(1 as bit),
1,
null
where
@INCLUDESPOTRATE = 1
and @FROMCURRENCYID <> @TOCURRENCYID
union
select
CURRENCYEXCHANGERATE.ID,
CURRENCYEXCHANGERATE.SOURCECODEID,
CURRENCYEXCHANGERATE.ASOFDATE,
CURRENCYEXCHANGERATE.DATEADDED,
CURRENCYEXCHANGERATESOURCECODE.[DESCRIPTION] SOURCECODEDESCRIPTION,
cast(0 as bit) ISSPOTRATE,
1 as RATERANK,
TIMEZONEENTRY.NAME TIMEZONEDISPLAYNAME
from
dbo.CURRENCYEXCHANGERATE
left join dbo.CURRENCYEXCHANGERATESOURCECODE on CURRENCYEXCHANGERATESOURCECODE.ID = CURRENCYEXCHANGERATE.SOURCECODEID
left join dbo.TIMEZONEENTRY on TIMEZONEENTRY.ID = CURRENCYEXCHANGERATE.TIMEZONEENTRYID
where
CURRENCYEXCHANGERATE.ID = @CURRENTEXCHANGERATEID
and
(
CURRENCYEXCHANGERATE.TYPECODE = 2
or
CURRENCYEXCHANGERATE.ASOFDATE <= @DATEWITHTIMEOFFSET
)
) CURRENCYEXCHANGERATERANKED
where
CURRENCYEXCHANGERATERANKED.RATERANK = 1
order by
CURRENCYEXCHANGERATERANKED.ISSPOTRATE,
CURRENCYEXCHANGERATERANKED.ASOFDATE desc,
CURRENCYEXCHANGERATERANKED.SOURCECODEDESCRIPTION,
CURRENCYEXCHANGERATERANKED.DATEADDED desc;