Format a date in mysql - mysql

To get a date I can do:
select date(now())
And it will give me:
2018-11-30
How would I format it as:
YYYYMMDD
So it gives me:
20181130
Is there a better way than:
select replace(date(now()), '-','')

SELECT DATE_FORMAT(NOW(), '%Y%m%d')
Manual:
https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format

Related

MySQL Filter Records Set Using DD-MM-YYYY Date Format

I'm a bit confused on how to filter records by date formats.
I have date column of date(yyyy-mm-dd) data type in date table.
Ex:
date
-----
2017-01-29
2017-01-30
I'm want to change the format (dd-mm-yyyy). I'm using this code
SELECT
DATE_FORMAT(`date`, '%d-%m-%Y') as date
FROM
dim_date;
date
-----
29-01-2017
30-01-2017
I want to filter the records with the(dd-mm-yyyy) format. So I tried this code.
SELECT
DATE_FORMAT(`date`, '%d-%m-%Y') date
FROM
dim_date
WHERE DATE_FORMAT(`date`, '%d-%m-%Y') BETWEEN '20-04-2015' AND '06-09-2017';
Results
Nothing
But if I try to filter with the original format (yyyy-mm-dd) It Works.
SELECT DATE_FORMAT(`date`, '%d-%m-%Y') date
FROM dim_date
WHERE DATE_FORMAT(`date`, '%Y-%m-%d') BETWEEN '2015-04-20' AND '2017-01-07';
Why is this weird behavior in Mysql? Am I missing something here?
I also tried with this format DATE_FORMAT(date, '%d-%c-%Y') , DATE_FORMAT(date, '%d-%l-%Y') & DATE_FORMAT(date, '%e-%l-%Y')
No happy face, Please let me known.
Thanks
Max
with your query you convert the date in string and then you are comparing values using between in wrong order ('20' > '06' ) so don't work.
Between require first the min value and second the max value.
If you are working with date you sould convert the string date
so the where between work correcly and avoid the string behavior is filter
SELECT date
FROM dim_date
WHERE date BETWEEN str_to_dat('20-04-2015', '%d-%m-%Y')
AND str_to_date('06-09-2017', '%d-%,-%Y');

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'

How to convert timestamp from MySQL table to human readable form

Any idea how to format a timestamp from a MySQL table inside a query to a human readable form?
Example:
{ts '1978-01-16 00:00:00'}
Needed output:
16-01-1978
I have tried:
select DATE_FORMAT(BIRTHDAY, '%d-%m-%Y') FROM cs_user
with no success:
[Table (rows 10 columns DATE_FORMAT(BIRTHDAY, '%D-%M-%Y')): [DATE_FORMAT(BIRTHDAY, '%D-%M-%Y'): coldfusion.sql.QueryColumn#1077e6ed] ] is not indexable by DATE_FORMAT(BIRTHDAY
My BIRTHDAY column is created as date in the MySQL table.
Take the alias name for the field and try it.
select DATE_FORMAT(BIRTHDAY, '%d-%m-%Y') as some_alias_name FROM cs_user
check, this for an example related to this.
after DATE_FORMAT in a bracket first parameter will be column of the table, then the date format,
Try this
select DATE_FORMAT(date, '%d-%m-%Y') as BIRTHDATE FROM cs_user
find the below link for all the date format which mysql supports.
http://www.w3schools.com/sql/func_date_format.asp
Try this:
SELECT DATE_FORMAT( FROM_UNIXTIME( table.column ) , '%d - %m - %Y' ) FROM table

Get time from Timestamp stored as varchar

I have timestamps in varchar(20) like '01-11-2012 11:36:53.122'
If I get only date by
SELECT STR_TO_DATE("01-11-2012 11:36:53.122", '%d-%m-%Y')
it gives this output: "2012-11-01".
But by this
SELECT STR_TO_DATE("01-11-2012 11:36:53.122", '%H:%i:%s')
it gives the output "null" instead of 11:36:53.
What is query to get only the time?
give this a try
DATE_FORMAT(STR_TO_DATE(`column`, '%d-%m-%Y %H:%i:%s'), '%H:%i:%s')
SQLFiddle Demo
Other sources,
STR_TO_DATE
DATE_FORMAT
SELECT date_format(STR_TO_DATE("01-11-2012 11:36:53.122", '%d-%m-%Y %H:%i:%s.%f'), '%H:%i:%s')
SQLFiddle demo
Change your field format to datetime.
That's the only proper way to store datetime values.

Retrieve time from MySQL as HH:MM format

I used DATETIME datatype to store date and time in my Database. It saved date as
YY-MM-DD HH:MM:SS (2012-11-06 10:45:48)
I can retrieve the time from database as HH:MM:SS format but I want to retrieve it in HH:MM format.
How can I do this?
Check the DATE_FORMAT Function.
SELECT DATE_FORMAT(date_column, '%H:%i') FROM your_table
You will want to use DATE_FORMAT():
select date_format(yourDateColumn, '%h:%i') yourTime
from yourtable
See SQL Fiddle with Demo
SELECT DATE_FORMAT( NOW() , '%H:%i' ) AS time_column