Mysql between query not working - mysql

I am using mysql. I want to display records between two dates.
I searched through web and found that mysql's date format is yyyy/mm/dd.
so I am writing query as follows,
select
*
from tbl_reservation
where
current_date between '2014-03-28' and '2014-03-26';
But, I don't know why it is not working. "col_date" has DATE datatype. I am not storing time in it.
Let me give you some idea what i have done at back end,
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Date curr_date=new Date();
String compareDate=sdf.format(curr_date);
And I am storing this value in "col_date". Is it happening because of this processing?
Thanks for your valuable time in advance.

With BETWEEN, use least date first, latest date next
It should be:
select * from tbl_reservation
where col_date between '2014-03-26' -- least date
and '2014-03-28'; -- latest date

Write lower date value first.
SELECT * FROM tbl_reservation WHERE col_date BETWEEN '2014-03-26' AND '2014-03-28'

I have set column name as current_date. Actually it is a function in mysql. So i can not use current_date as column name. Thanks I learned something new today. Thank you Masters.

Related

Selecting from date range mysql/phpmyadmin problem

For my current project I'm using XAMPP. I have a problem on pulling data from a date range, sorry for the messy title I don't know how to word it out. The problem is I'm pulling dates from 06/01/2020 to this day 06/16/2020 however it doesn't display the data for today, but when my end date is 06/17/2020 (which is tomorrow at least in my country) it appears. Thank you in advance!
Did you use only greater or less >,< operators or also with equal values <=,>=?
You can also use BETWEEN function in your query.
WHERE date BETWEEN CAST('2020-06-01' AS DATE) AND CAST('2020-06-16' AS DATE);
Which is equivalent to:
WHERE date >= CAST('2020-06-01' AS DATE)
AND date <= CAST('2020-06-16' AS DATE);
I've got it, I used SELECT * FROM data WHERE date(date) BETWEEN '2020-06-01' AND '2020-06-16'; if someone's look for this too, please try this out :)

MySQL query to search in between two time range between two dates using timestamp data

I have timestamp values in my db. It has values like 2014-11-25 10:30:00.
I need to get all records between two dates and that has time between certain range like between 2014-10-20 to 2014-11-25 and between 9am to 7pm..
I need the query for this...
You can use the following query , I used it in my code for displaying data between two dates.
SELECT * from tablename WHERE columnname BETWEEN '2014-10-20 00:00:00' AND '2014-11-25 23:59:59'
The query includes start time of the particular date to end time of ending particular date.
You edit your query according to your start and end timings.
You can use internal mysql functions for convert datetype.
I think you need DATE() and TIME() functions.
Details you can find here
Thanks for your reply guys. I have found the answer
SELECT * FROM alerts
WHERE DATE BETWEEN '2014-11-16' AND '2014-11-26'
AND TIME(DATE) BETWEEN '09:00' AND '19:00'
Is giving the expected result.. :-)

how to get the data using from date and to date in sql server?

i need to retreive data from database with the condition from date to to date using between query,
my query is,
select * from Master where Date between '01-08-2013' and '30-08-2013'
but it retreive all data from the table...
i need only data with in that date..
i tried another one like,
select * from PatientMaster where EntryDate >= '01-08-2013' and EntryDate<= '30-08-2013'
how its posible..
whats wrong with my query...
sorry im very bad in english...
thank you in advance...
A date string has the syntax YYYY-MM-DD and not DD-MM-YYYY
select * from Master
where `Date` between '2013-08-01' and '2013-08-30'
for that you can use
select * from Master where Date >='01-08-2013' and dateadd(dd,1,'30-08-2013')
You have to convert your strings to dates. This page shows you how to do it in mysql, which is what you have tagged. For sql server, which is in your subject line, use this page.
Then you do a slight modification of your 2nd attempt. Instead of
and EntryDate <= the end date
you want
and EntryDate < the day after the end date
That takes care of any time components. It might not matter in your case, but it's a good habit to get into.
You'll be looking for an query that works with your format? (dd-mm-yy)
CAST to the desired format!
http://www.w3schools.com/sql/func_convert.asp
105 = dd-mm-yy
SELECT * FROM Master
WHERE CONVERT(date, Date, 105) BETWEEN '01-08-13' and '30-08-13'
Be conscious with regards of the choice of data type for date Columns,
with or without time, day or year first etc. and please do not use varchar
for dates...
know that it CAN be confusing to call a date column for only Date...
be consistent with high/lower case.

Number of days between current date and date field

I have this problem if anyone can help.
There is a field (date) in my table (table1) that is a date in the format 3/31/1988 (M/D/y), and my necessity is to define how many days have passed since that date.
I have tried to give this instruction
SELECT DATEDIFF(CURDATE(), date) AS days
FROM table1
But it gives back 'null' and I think this happens because the two date formats are different (CURDATE() is YMD.....
Is it correct? can anyone help me?
Thank you in advance
You can use STR_TO_DATE():
SELECT DATEDIFF(CURDATE(),STR_TO_DATE(date, '%m/%d/%Y')) AS days
FROM table1
SQLFiddle Demo
Your DATE field should have DATE or DATETIME format to be used as DATEDIFF argument correctly.
Also DATE is MySQL keyword and I am not sure that you can use it as valid field name.
You can use this for accurate result
SELECT DATEDIFF(CURDATE(), DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP(`date`)), '%Y-%m-%d')) AS days FROM `table1`
If you want to consider results without - signs that you have to follow parameters position as below :
SELECT DATEDIFF(Big_Date,Small_Date) AS days FROM table1.
positive results e.g 5 (with no sign), if you place a Small date as the first parameter then it will results minus sign e.g -5.

Help me to revise mySQL query

I am trying to check if a regulation's date reminder is today and regulation's date end not yet passed then I do not want it to display. The problem is that the query that I made isn't working in mysql. Can anyone help me to revise my query?
Here is my query:
$query="select * from t_regulation where dt_reminder >= '$today' and dt_ended ='$today'"
This is assuming that your dt_reminder columns type is DATETIME, and not some sort of timestap.
SELECT * FROM t_regulation WHERE DATE(dt_reminder) >= CURDATE() AND DATE(dt_ended) = CURDATE()
You can do many funky things with date functions;
Mysql date/time functions
Very frequently I run into the problem that my date variable is a string that is not properly formatted for the default date time stamp in Mysql.
Remember it should be 'yyyy-mm-dd' for this comparison.
Also, for since the 'date ended' has not yet passed, shouldn't it be:
$query="select * from t_regulation where dt_reminder >= '$today' and (dt_ended > '$today' or dt_ended is null)"