I'm trying to select phone number that is between date_from and date_to
or the date_to is null
but the problem in the Or part it neglects the other conditions (where pho.parent_id =:p_id and pho.phone_type='M' and rownum <=1 )
select pho.PHONE_NUMBER
from per_phones pho
where pho.parent_id = :p_id and
pho.phone_type='M'
and
rownum <=1 and sysdate > pho.DATE_FROM and sysdate < DATE_TO or DATE_TO is null;
Put your OR condition within braces
select pho.PHONE_NUMBER
from per_phones pho
where pho.parent_id = :p_id and pho.phone_type='M'
and rownum <=1 and
(sysdate > pho.DATE_FROM and sysdate < DATE_TO or DATE_TO is null)
I think your DATE_TO is null in case your record is valid from DATE_FROM till end of time.
You will still need to check DATE_FROM condition and also put rownum condition in the outer query so you need following:
Select PHONE_NUMBER from
(select pho.PHONE_NUMBER
from per_phones pho
where pho.parent_id = :p_id
and pho.phone_type='M'
and rownum <= 1 -- this is not needed here
and sysdate > pho.DATE_FROM
and (sysdate < DATE_TO or DATE_TO is null)
)
Where rownum <= 1
Cheers!!
I have a few dates in the YYYY-MM-DD format in the table column. how can I find the nearest date, less than or equal to today?
Normally I would use:
<= (SELECT TO_CHAR (TRUNC (SYSDATE), 'YYYY-MM-DD') from DUAL)
but it will return all values less or equal, and I only want one, the nearest.
Thanks for help.
One method is:
select t.*
from (select t.*
from t
where datecol < sysdate -- trunc(sysdate) ???
order by datecol desc
) t
where rownum = 1;
I have two columns in my table start_date and end_date and my query inputs two values input_start_date and input_end_date.
I want the data from input_start_date to input_end_date by querying start_date and end_date.
I am able to achieve this by following query:
SELECT * FROM table-name where (
(start_date >= input_start_date and end_date <= input_end_date) or
(start_date <= input_start_date and end_date >= input_end_date) or
(start_date >= input_start_date and start_date <=input_end_date) or
(end_date >= input_start_date and end_date <= input_end_date)
);
Is there any better way of doing it ?
SELECT column-names
FROM table-name
WHERE column-name BETWEEN value1 AND value2
This one is for between one date
SELECT column-names
FROM table-name
WHERE start_date = input_start_date AND end_date = input_end_date
I have a table Named Product_Sales and it holds data like this
Product_ID | Sold_by | Qty | From_date | To_date
-----------+---------+-----+------------+-----------
3 | 12 | 7 | 2013-01-05 | 2013-01-07
6 | 22 | 14 | 2013-01-06 | 2013-01-10
8 | 11 | 9 | 2013-02-05 | 2013-02-11
Now what is the query if I want to select sales data between two dates from a date range?
For example, I want to select sales data from 2013-01-03 to 2013-01-09.
As you can see, there are two ways to get things done:
enlist all acceptable options
exclude all wrong options
Obviously, second way is much more simple (only two cases against four).
Your SQL will look like:
SELECT * FROM Product_sales
WHERE NOT (From_date > #RangeTill OR To_date < #RangeFrom)
SELECT * from Product_sales where
(From_date BETWEEN '2013-01-03'AND '2013-01-09') OR
(To_date BETWEEN '2013-01-03' AND '2013-01-09') OR
(From_date <= '2013-01-03' AND To_date >= '2013-01-09')
You have to cover all possibilities. From_Date or To_Date could be between your date range or the record dates could cover the whole range.
If one of From_date or To_date is between the dates, or From_date is less than start date and To_date is greater than the end date; then this row should be returned.
Try following query to get dates between the range:
SELECT *
FROM Product_sales
WHERE From_date >= '2013-01-03' AND
To_date <= '2013-01-09'
SELECT * FROM Product_sales
WHERE From_date between '2013-01-03'
AND '2013-01-09'
This covers all conditions that you are looking for.
SELECT * from Product_sales where (From_date <= '2013-01-09' AND To_date >= '2013-01-01')
SELECT *
FROM Product_sales
WHERE (
From_date >= '2013-08-19'
AND To_date <= '2013-08-23'
)
OR (
To_date >= '2013-08-19'
AND From_date <= '2013-08-23'
)
Please try:
DECLARE #FrmDt DATETIME, #ToDt DATETIME
SELECT #FrmDt='2013-01-03', #ToDt='2013-01-09'
SELECT *
FROM Product_sales
WHERE (#FrmDt BETWEEN From_date AND To_date) OR
(#ToDt BETWEEN From_date AND To_date)
This is easy, use this query to find select data from date range between two dates
select * from tabblename WHERE (datecolumn BETWEEN '2018-04-01' AND '2018-04-5')
Just my 2 cents, I find using the "dd-MMM-yyyy" format safest as the db server will know what you want regardless of the regional settings on the server. Otherwise you could potentially run into issues on a server that has its date regional settings as yyyy-dd-mm (for whatsoever reason)
Thus:
SELECT * FROM Product_sales
WHERE From_date >= '03-Jan-2013'
AND To_date <= '09-Jan-2013'
It's always worked well for me ;-)
select *
from table
where
( (table.EndDate > '2013-01-05') and (table.StartDate < '2013-01-07' ) )
Check this query, i created this query to check whether the check in date over lap with any reservation dates
SELECT * FROM tbl_ReservedRooms
WHERE NOT ('#checkindate' NOT BETWEEN fromdate AND todate
AND '#checkoutdate' NOT BETWEEN fromdate AND todate)
this will retrun the details which are overlaping , to get the not overlaping details then remove the 'NOT' from the query
This query will help you:
select *
from XXXX
where datepart(YYYY,create_date)>=2013
and DATEPART(YYYY,create_date)<=2014
This working on SQL_Server_2008 R2
Select *
from Product_sales
where From_date
between '2013-01-03' and '2013-01-09'
SELECT NULL
FROM HRMTable hm(NOLOCK)
WHERE hm.EmployeeID = 123
AND (
(
CAST(#Fromdate AS date) BETWEEN CAST(hm.FromDate AS date)
AND CAST(hm.ToDate AS date)
)
OR (
CAST(#Todate AS date) BETWEEN CAST(hm.FromDate AS date)
AND CAST(hm.ToDate AS date)
)
)
)
You can also try using following fragments:
select * from Product_sales
where From_date >= '2013-01-03' and game_date <= '2013-01-09'
Here is a query to find all product sales that were running during the month of August
Find Product_sales there were active during the month of August
Include anything that started before the end of August
Exclude anything that ended before August 1st
Also adds a case statement to validate the query
SELECT start_date,
end_date,
CASE
WHEN start_date <= '2015-08-31' THEN 'true'
ELSE 'false'
END AS started_before_end_of_month,
CASE
WHEN NOT end_date <= '2015-08-01' THEN 'true'
ELSE 'false'
END AS did_not_end_before_begining_of_month
FROM product_sales
WHERE start_date <= '2015-08-31'
AND end_date >= '2015-08-01'
ORDER BY start_date;
DECLARE #monthfrom int=null,
#yearfrom int=null,
#monthto int=null,
#yearto int=null,
#firstdate DATE=null,
#lastdate DATE=null
SELECT #firstdate=DATEADD(month,#monthfrom-1,DATEADD(year,#yearfrom-1900,0)) /*Setting First Date using From Month & Year*/
SELECT #lastdate= DATEADD(day,-1,DATEADD(month,#monthto,DATEADD(year,#yearto-1900,0)))/*Setting Last Date using From Month & Year*/
SELECT * FROM tbl_Record
WHERE (DATEADD(yy, Year - 1900, DATEADD(m, Month - 1, 1 - 1)) BETWEEN CONVERT(DATETIME, #firstdate, 102) AND
CONVERT(DATETIME, #lastdate, 102))
You should compare dates in sql just like you compare number values,
SELECT * FROM Product_sales
WHERE From_date >= '2013-01-01' AND To_date <= '2013-01-20'
this is easy, use this query to find what you want.
select * from Product_Sales where From_date<='2018-04-11' and To_date>='2018-04-11'
select PERIOD_NAME
from gl_periods
where :l_date_from between start_date and end_date
and :l_date_to between start_date and end_date
This query is not working.
I need to select from date and to date between those two columns.And should display all period names between those two dates.
Help me with this query.
Try this:
select PERIOD_NAME
from gl_periods
where :l_date_from <= end_date
and :l_date_to >= start_date