Insert a certain date format into MySQL - mysql

A very simple Insert statement with a topic and a date I would like to insert the date as a certain format "MM/DD/YY" Don't know if it's possible or not?
$sql = "INSERT INTO Topic (Topic,date) VALUES ('$Topic',NOW())";

No, it is not possible using just NOW(). That format is not the standard date format for MySQL so you have to store it as a string. But that is a bad idea because you can use any of MySQL's date functions without first converting back into a valid date which is tedious.
Just store your dates in the date data type and then when you want to retrieve them use DATE_FORMAT() to transform them into MM/DD/YY format.
SELECT DATE_FORMAT(date, "%m/%d/%y") as date FROM ....
-- date is now in MM/DD/YY format

Related

Missing date after importing csv to MySQL using phpmyadmin

CSV date format is DD/MM/YYYY like this 16/11/2016. All the date become 0000-00-00 in MySQL. How to solve this differences?
As of now I can think of two solutions to you problem:
Create a additional VARCHAR field to insert those values (like 16/11/2016), and create a TRIGGER on INSERT to update the date field by converting the string date to 'YYYY-mm-dd' type.
These links may help
https://dev.mysql.com/doc/refman/5.5/en/trigger-syntax.html
http://www.w3resource.com/mysql/date-and-time-functions/mysql-str_to_date-function.php
In this step also, Create a additional VARCHAR field to insert those values (like 16/11/2016) and after import is done run a UPDATE query to update your date field using SET dateField = convertDate(dateFromSheet)

Selecting date range when date is formatted as dd/mm/YYYY

The dates in my database are stored as dd/mm/YYYY
How can I construct a simple mySQL query to pull dates within a certain range:
e.g.
SELECT * FROM metric WHERE date BETWEEN '31/01/2016' AND '01/02/2017'
You can use str_to_date but remember that now the server can't use index on the date column if any.
select *
from metric
where str_to_date(date,'%d/%m/%Y') between '2016-01-31'
and '2017-02-01'
It's better to store the date as date or if string then in standard format yyyy-mm-dd.
You should do the following:
Update all the columns that hold a date as a string to a date column
UPDATE metric SET `dateColumn` = str_to_date(`dateColumn`,'%d/%m/%Y');
Alter table
ALTER TABLE metric MODIFY `dateColumn` DATE;
Modify your code to insert valid dates to mysql
Use built in mysql date functions for your task
SELECT * FROM metric WHERE date BETWEEN '2016-01-31' AND '2017-02-01'

Alter Query To Change Date Format

How can i use the alter query to change a DATE format in mysql
for example
ALTER table userdata ADD column DateofBirth DATE SET = '%d-%m-%Y';
I tried this and it didnt work.
If your dates are stored in column with type DATE. You can set date format in SELECT query:
SELECT DATE_FORMAT(DateofBirth ,'%d-%m-%Y') AS DateofBirth FROM userdata;
There is no "date format" specified with the DATE datatype. It's not possible to specify a format with the column definition.
MySQL does provide a couple of useful functions... STR_TO_DATE and DATE_FORMAT that convert between DATE and string representations, in a variety of formats.
Reference: http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-format
If am not wrong, you need a update statement
Update userdata set DateofBirth = DATE_FORMAT(DateofBirth ,'%d-%m-%Y')
But it is better to store dates in DATE datatype

Convert varchar column to date in mysql at database level

I have one column date1 which is varchar type
I want this column to date type.
I tried changing field but all date is converted to 0000-00-00.
format is dd-mm-yyyy but in varchar.
How can I convert the same date format but with date format using sql queries or similar but at database level ?
UPDATE `table`
SET `column` = str_to_date( `column`, '%d-%m-%Y' );
More about STR_TO_DATE function.
Since your column name is date1, you can replace column with date1 in the above syntax, and the code shall be:
UPDATE `table`
SET `date1` = str_to_date( `date1`, '%d-%m-%Y' );
The other answers here are risky, because if they go wrong you'll lose your data. A safer way to do this is to create a new field on your database with a DATE (or DATETIME if you need time as well) format, then to run a query like
UPDATE `table` SET `my_new_date_field` = STR_TO_DATE( `my_old_data_field`, '%d/%m/%Y');
In this way, if the %d/%m/%Y bit is wrong, you won't lose your data.
Once you're happy, you can delete the old data field and rename the new one.
use STR_TO_DATE Function of MySQL
FIRST you will need to update the value in date format.
UPDATE `tbl` SET `date1` = STR_TO_DATE(`date1`, '%d-%m-%Y') WHERE 1=1
THEN Convert the field to date.
Most importantly remember to insert date as Y-m-d format, after then.

Change string into datetime then copy data to new table and compare

I have been researching this for a week and still no luck. I have a txt file that loads into 'temploadsi' table via php. The text file will always have old data that is already in the database so I only want the "new" data. My idea was to have a loading table 'temploadsi' and then compare the time stamps and import only "new" data into table 'tempdatasi'. The issue is that the time stamp column is formatted like 'MM/DD/YYYY HH:MM:SS' and that will not go into the mySQL datetime field. Therefore I have it set as a text field. I would like to convert the text into a datetime field like 'YYYY-MM-DD HH:MM:SS'. I have looked at STR_TO_DATE and DateTime functions but unable to update 'temploadsi'. Can you all help out?
The reason why you failing to update the field is because the time of your data is 24:59:59 which is not valid. The maximum time i think is 23:59:59, so in order to convert that to date, you need to use the following format
SELECT DATE_FORMAT(STR_TO_DATE(datetime,'%m/%d/%Y %x:%x:%x'), '%Y-%m-%d 23:59:59')
FROM table1
See SQLFiddle Live Demo
So if you wnt to update your field, you can use this query
UPDATE tableName
SET your_columnname = DATE_FORMAT(STR_TO_DATE(your_columnname, '%m/%d/%Y %x:%x:%x'), '%Y-%m-%d 23:59:59')
and this query assumes that your column you are updating has VARCHAR datatype.
Something like Str_to_date('12/10/2012 23:59:59','%m/%d/%y %h:%i:%s')
Don't get why you couldn't find this though
[Mysql Help]
http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-date