How to make SQL query elapse time between selected date and now? - mysql

Let say i have a date field and i want to calculate the days between
Selected date on the date field and now() as in system date how do i make the query using SQL?

select DATEDIFF(columnwithdatename, NOW()) from table

Use the DateDiff function:
http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_datediff
e.g.
SELECT DATEDIFF(MyDateColumn, NOW()) FROM MyTable;

use the sql datediff function
for example
select datediff(day, myDate, getdate()) as daysAgo
from myTable

Maybe try using DATEDIFF SQL function (http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_datediff).
So for example:
SELECT DATEDIFF(NOW(), your_date_field) FROM your_table;

Related

DateTime condition [duplicate]

I get a datetime field, that's currently in the query as:
SELECT DATE_FORMAT(x.date_entered, '%Y-%m-%d') AS date FROM x ORDER BY date ASC
What I want to do is to subtract 3 hours from that date (GMT issues), but I can't do it in PHP as PHP only knows the date part, not the time.
mySQL has DATE_SUB():
SELECT DATE_SUB(column, INTERVAL 3 HOUR)....
but would it not be better to try and sort out the underlying time zone issue instead?
Assuming you have some timezone issue and know source and destination timezone, you could convert it like so
SELECT DATE_FORMAT(CONVERT_TZ(x.date_entered, 'UTC', 'Europe/Berlin'),
'%Y-%m-%d') AS date
FROM x ORDER BY date ASC;
Normal select query.
Once applied DATE_ADD() function in MySQL
select lastname,
date_add(changedat, interval -24 hour) as newdate
from employee_audit;
lastname and changedat is field name and employee_audit is table name.

How to convert a date string to mysql date format for calculating date diff using mysql query

I have a column where a date store in ddmmyy format (e.g. 151216). How can I convert it to yyyy-mm-dd format (e.g 2016-12-15) for calculating a date difference from the current date? I try using DATE_FORMAT function but its not appropriate for this.
If you want to get the date difference, you can use to_days() after converting the string to a date using str_to_date():
select to_days(curdate()) - to_days(str_to_date(col, '%d%m%y'))
or datediff():
select datediff(curdate(), str_to_date(col, '%d%m%y'))
or timestampdiff():
select timestampdiff(day, str_to_date(col, '%d%m%y'), curdate())
You can use the function, STR_TO_DATE() for this.
STR_TO_DATE('151216', '%d%m%y')
A query would look something like:
select
foo.bar
from
foo
where
STR_TO_DATE(foo.baz, '%d%m%y') < CURDATE()
Note: Since both STR_TO_DATE() and CURDATE() return date objects, there's no reason to change the actual display format of the date. For this function, we just need to format it. If you wanted to display it in your query, you could use something like
DATE_FORMAT(STR_TO_DATE(foo.baz, '%d%m%y'), '%Y-%m-%d')
To get the difference, we can simply subtract time
select
to_days(CURDATE() - STR_TO_DATE(foo.baz, '%d%m%y')) as diff
from
foo
If you wanted to only select rows that have a difference of a specified amount, you can put the whole to_days(...) bit in your where clause.
SELECT STR_TO_DATE('151216', '%d%m%y') FROM `table`
use this '%d%m%y'

Is there a function similar to Oracle's trunc(sysdate) in mysql

In Oracle I can query like:
Select * from Orders where trunc(createdDate) = trunc(sysdate)
and I get all orders created today.
How to do the same in MySql?
So far I can only find like currentdate() = '07-05-2017', I don't want to hard code the date.
Thank you,
Dapid Candra
The date() function returns the date part of any datetime value and curdate() function returns the current date, so no need to truncate its result:
... date(createdDate)=curdate()
I think a bit faster
Select *
FROM Orders
WHERE createdDate >= curdate();
Yes, you can use MySQL's DATE() function (along with NOW() function to get the current date). Here's the documentation.
Extracts the date part of the date or datetime expression expr.
Your query would be:
Select *
FROM Orders
WHERE DATE(createdDate) = DATE(NOW())
Update
As suggested by #Rahul, we can replace DATE(NOW()) with CURDATE() as it returns date without timestamp, e.g.:
Select *
FROM Orders
WHERE DATE(createdDate) = CURDATE()

Comparing dates in MySQL ignoring time portion of a DateTime field

I need to compare dates in MySQL ignoring the time portion in a DateTime column. I have tried the following SQL.
SELECT * FROM order_table where order_date=date_format('2012-05-03', '%Y-%m-%d');
It doesn't retrieve any row even though there is a date 2012-05-03 10:16:46 in MySQL table. How can the time portion in the DateTime field be ignored while comparing dates in MySQL?
You could use the DATE function:
SELECT col1, col2, ..., coln
FROM order_table
WHERE date(order_date) = '2012-05-03'
But this is more efficient, if your table is large and you have an index on order date:
SELECT col1, col2, ..., coln
FROM order_table
WHERE order_date >= '2012-05-03'
AND order_date < '2012-05-04'
If you want to pass in a date then you can try something like this:
where YEAR(order_date)='2012' AND MONTH(order_date)='05' AND DAY(order_date)='03'
You can look at this for more functions.
#Mark has got the good approach but just be careful that you will always have to calculate and find next day in that case. If you want to avoid that and still ignore time you could do following:
WHERE order_date >= '2012-05-27 00:00:00' AND order_date <= '2012-05-27 23:59:59'
I hope this makes sense.
SELECT * FROM order_table WHERE date(order_date) = '2012-05-03';
Maybe, you can use function like date(). But in this case speed can be decreased, because index cannot be using. So, I recommend to use
SELECT * FROM order_table
WHERE order_date between('2012-05-03 0:0:0' and '2012-05-03 23:59:59')
This is bit old .... but a correct answer also is using the date_format at the column order_date like below:
SELECT * FROM order_table where date_format(order_date, '%Y-%m-%d')='2012-05-03';
one of the following could be used when comparing dates in MySQL:
DATEDIFF() Subtract two dates
TIMEDIFF() Subtract time
TIMESTAMPDIFF() Subtract an interval from a datetime expression
PERIOD_DIFF() Return the number of months between periods
for more on date functions MySQL documentation.
In my case i had , DATE_FORMAT and CONVERT_TZ
The only one worked for me is this
DATE_FORMAT(CONVERT_TZ(`order_item`.created, '+0:00', '+2:00'), '%d/%m/%Y %H:%i')
BETWEEN
('12/02/2018 01:42')
AND
('12/02/2018 10:51')

Date difference in SQL

How can I get the number of second between NOW() and a date in the database.
Thanks.
Use the TIMESTAMPDIFF function. (the TIMEDIFF function has a upper limit of 838:59:59)
SELECT TIMESTAMPDIFF(SECOND, DateColumn, NOW()) As Seconds
FROM table
Try this:
SELECT TIME_TO_SEC(TIMEDIFF(Now(), yourDateTime)) From Table;
MySQL: Now()
MySQL: TimeDiff-Function
MySQL: TIME_TO_SEC-Function