How do you change date format in mysql? - mysql

How do you change date format from yy-mm-dd to day-month-year?
I have tried this:
UPDATE stock
SET date_in = DATE(STR_TO_DATE(date_in, '%d/%m/%Y))
WHERE DATE(STR_TO_DATE(date_in, '%d/%m/%Y') <> '00-00-0000';
But it is giving me an error.

You store dates in database in one of the date formats (date,datetime,timestamp)
When you want to format them for view, either use your language, which surly has a date formatting functionality, or use the intrinsic mysql date_format in a SELECT statment

Related

How to Query between a date range in MySQL

I'm querying
SELECT * FROM tempLog WHERE date BETWEEN '23-03-2017' AND '02-04-2017'
and the result is null. How to fix this. But
SELECT * FROM tempLog WHERE date BETWEEN '23-03-2017' AND '30-03-2017'
giving me the correct result.
Note:- tempLog is the table name.
You should store dates in date format or atleast correctly formatted string (YYYY-MM-DD).
For now you can use str_to_date to convert the string to date and compare:
select *
from tempLog
where str_to_date(date, '%d-%m-%Y') between '2017-03-23' and '2017-04-02';
However note that this will hinder the optimizer from using index on the column if any.
The correct remedy of the situation is fixing the table structure.
According to the documentation, you're supposed to use this format when writing a date: 'YYYY-MM-DD' (although it says it may accept 'YYYYMMDD' or even YYYYMMDD in some contexts).

SQL Comparing Dates

in a database table I have made a date attribute but I have set it's type to varchar and not Date.
My question is, will I still be able to compare such dates in a SQL Query?
Dates in my DB are stored in this format:
dd/mm/yyyy hh:mm:ss
I have to do a SQL Query in PHP that looks something like this:
SELECT *
FROM DBtable
WHERE DBname='$name' AND date>='01/01/2015' AND date<='01/09/2015';
I would appreciate an example how to do this.
Thank you for your help.
You'll need to convert/cast to compare:
SELECT *
FROM DBtable
WHERE DBname='$name'
AND CAST(date AS DATETIME) >='2015-01-01'
AND CAST(date AS DATETIME)<='2015-01-09'
;
Much better to store values as the appropriate data types to avoid this inefficiency. You could also use DATE instead of DATETIME if you want to compare without the time component. Syntax and available datatypes vary by database, so the above may need adjustment.
Update: Since you're using MySQL, you can use the following:
SELECT *
FROM DBtable
WHERE DBname='$name'
AND STR_TO_DATE(`date`, '%d/%c/%Y') >= '2015-01-01'
AND STR_TO_DATE(`date`, '%d/%c/%Y') <= '2015-01-09'
;
Yes you can cast a Varchar to a Date. Here is an example:
SELECT
CAST(date_column AS DATETIME)
FROM
TABLE_NAME
In your case it might look like:
SELECT *
FROM DBtable
WHERE DBname='$name'
AND CAST(date AS DATETIME) >='01/01/2015'
AND CAST(date AS DATETIME) <='01/09/2015';
You can cast or convert a varchar to a date or datetime before you do any comparisons.
But you'd have to do it every single time you compare the date to something. That's because the following comparisons are all true if you compare them as varchar:
'2/1/2015' > '1/5/2016'
'25/1/2015' > '15/2/2015'
'11/1/2015' < '3/1/2015'
You'll also need to convert if you want to pull out some time-based aspect of the dates, such as any records where the hour was before 8:00 AM. There is no easy way to do that if your date is a varchar.
And that assumes that the value in your database can always be parsed into a date! If an empty string or some other kind of data gets in there, CONVERT(datetime, MyColumn) will fail.
So I would strongly recommend that you change your column to be a date or datetime. It will make your life much easier.

Query for rows within a date range that also have a specified substring

I'm trying to query a MySQL database and return all records within a given date range and which also contain the substring 'bank' in the content column.
The format of the 'time' field I refer to is mm/dd/yyyy hh:mm:ss.
Here's the statement I've come up with but MySQL Workbench is giving me issues:
SELECT *
FROM blogs
WHERE ((‘time’ BETWEEN “04/01/2011 00:00:00” AND “04/15/2011 23:59:59”)
AND (‘content’ LIKE ‘%bank%’))
How about trying this:
SELECT *
FROM blogs
WHERE `time` BETWEEN '2011-04-01 00:00:00' AND '2011-04-15 23:59:59'
AND `content` LIKE '%bank%';
This works if your time field is in fact a timestamp. If time is not a timestamp then you will have to go with something like the answer from McAdam331 but I'm hoping your database is using the correct types for the kind of data you are asking it to store.
single ' or double " quotes around values and ticks ` around field names. I also changed the date format to yyyy-mm-dd hh:mm:ss and eliminated some unnecessary parentheses.
http://sqlfiddle.com/#!9/730bd/1/0
It would be helpful if you posted the structure of the table when posting questions like this so we can be sure to give the right answer.
It isn't a good idea to store dates like that in MySQL. The DBMS has Date and Time Types you can use to store that information.
If changing the database isn't an option, you can convert a string to a date object using the STR_TO_DATE function, which takes in a date string and the format that it is in already and returns a date.
MySQL stores dates in the 'YYYY-MM-DD' format, so to get that format you can try something like this:
SELECT STR_TO_DATE('04/01/2011', '%m/%d/%Y');
Which will return a date object for that day. Note the capital Y.
Then it becomes much easier to query between dates, like this:
SELECT *
FROM myTable
WHERE STR_TO_DATE(dateString, '%m/%d/%Y %H:%i:%s') BETWEEN STR_TO_DATE('04/01/2011 00:00:00', '%m/%d/%Y %H:%i:%s') AND STR_TO_DATE('04/15/2011 23:59:59', '%m/%d/%Y %H:%i:%s')
AND content LIKE '%bank%';
Here is an SQL Fiddle example, and here is a link that has the formatting characters you need.

Change MYSQL date format

I have a table in MYSQL of which 3 columns have dates and they are formatted in the not desired way.
Currently I have: mm/dd/yyyy and I want to change those dates into dd/mm/yyyy.
Table name is Vehicles and the columns names are:
CRTD
INSR
SERD
Your current datatype for your column is not date right? you need to convert it to date first using STR_TO_DATE() and convert back to string
SELECT DATE_FORMAT(STR_TO_DATE(colName, '%c/%d/%Y'), '%d/%c/%Y')
FROM table1
SQLFiddle Demo
try this:
select date_format(curdate(), '%d/%m/%Y');
In you case you have to use this query.If all three columns are of datetime type
select date_format(CRTD, '%d/%m/%Y'),
date_format(INSR, '%d/%m/%Y'),
date_format(SERD, '%d/%m/%Y')
From yourTable
You can use the date_format() function to format your dates any way you want.
If you want to change the format for every date on any database you work with, you should change the value of the date_format system variable.
UPDATE Vehicles SET yourdatecolumn=DATE_FORMAT(STR_TO_DATE(yourdatecolumn, '%c-%d-%Y'), '%d-%c-%Y')

Date_format not working when inserting data into a table? (SQL)

Is it valid to do this to change the date format while inserting data?
$sqlCommand = "INSERT INTO articles (id, title, content, publicationDate) VALUES ('NULL', '".$title."', '".$content."', DATE_FORMAT(NOW(), '%b, %e, %Y'))";
If not, how do I change the default date format (which is currently year-month-day)?
the format you use to insert is not related to the format you get when selecting.
you can choose the format of the date column in the SELECT by using
TO_CHAR( publicationDate, 'yyyy mm/dd' )
or whatever format you like.
I agree with Randy,more over "Date" is a Data type defined in MySQL whose format cannot be changed.instead change it the way you want while u retrieve it in your query..
but 1 issue with the Date Data type is, every time you insert the date you have to give it in the yyyy-mm-dd format,if you find that weird,then i suggest you use a string datatype and form your queries accordingly.but of course i.e only if your database queries don't have any significant need of Publication Date attribute