MySQL - Convert "hh:mm PM" to unix timestamp - mysql

Given - Due to some bad design (legacy), one of the columns in my table(named delivery_time) has 'delivery time' stored as string in the format 'hh:mm PM'. I have another column (named delivery_date) with 'date' data type with format yyyy-mm-dd.
What to do - Using the information in these two columns I need to find date (day and time) in unix timestamp..
I was able to convert delivery_date to unix timestamp using the following function -
unix_timestamp(cast(delivery_date as date))
Can anyone suggest how to take care of delivery_time column?

Not verified but i guess this will work for you
SELECT
UNIX_TIMESTAMP(CONCAT(delivery_date, ' ',
STR_TO_DATE(delivery_time,'%h:%i %p)) AS
my_unix_timestamp

Related

how to change date format in mysql

The default date format in my SQL is : '2019-05-06'
and its fine but when i insert date to my table i want this format 2019-5-6 not the above format
It means month and day must be start 1 to 30 not 01 to 31.Is there any way to change default format in my sql?
You seem to be looking for the MySQL STR_TO_DATE function :
It takes a string str and a format string format. STR_TO_DATE() returns a DATETIME value if the format string contains both date and time parts, or a DATE or TIME value if the string contains only date or time parts.
So if the date coming out of your application is like '2019-5-6', to convert it to a MySQL date you need :
STR_TO_DATE('2019-5-6', '%Y-%c-%e')
In an INSERT statement :
INSERT INTO mytable VALUES(1, STR_TO_DATE('2019-5-6', '%Y-%c-%e'));
Tip :
%Y : Year as a numeric, 4-digit value
%c : numeric month name (0 to 12)
%e: day of the month as a numeric value (0 to 31)
The default way to store a date in a MySQL database is by using DATE. The proper format of a DATE is: YYYY-MM-DD. If you try to enter a date in a format other than the Year-Month-Day format, it might work but it won't be storing the dates as you expect.
In order to run a MySQL Insert command and add the current date into your table you can use MySQL's built-in function CURDATE() in your query.
An example of how to Insert a Date in MySQL using CURDATE
$query_auto = "INSERT INTO tablename (col_name, col_date) VALUE ('DATE: Auto CURDATE()', CURDATE() )";
Also, you can run a query to set the date manually
An example of how to Insert a Date in MySQL manually
$query_manual = "INSERT INTO tablename (col_name, col_date) VALUES ('DATE: Manual Date', '2008-7-04')";
It is recommended to do the date formatting when doing a query, like so:
SELECT DATE_FORMAT(BirthDate, "%W %M %e %Y") FROM Employees;
You can find more examples of formatting the date here:
https://www.w3schools.com/sql/func_mysql_date_format.asp

How to convert text datatype to datetime in mysql?

In mysql database,column name created.This "created " column is text datatype,I need to change this to datetime.Now this column have so many datas.Is it possible to convert it or?
Database look like
created
18-11-15 18:21:25
Expecting ouput is
created
2018-11-15 18:21:25
When am doing
ALTER TABLE invoices MODIFY created datetime
This query giving wrong data.its converting from 15-09-18 03:03:43 to 2015-09-18 03:03:43
If the original data is not in MySQL Datetime format (YYYY-MM-DD HH:MM:SS), you cannot just change the column datatype from Varchar/Text to Date/Datetime. Otherwise, there will be an irreparable Data loss.
This will be a multi-step process. You will first need to convert the date string to MySQL date format (YYYY-MM-DD HH:MM:SS). We can use STR_TO_DATE() function for this.
Your sample date string (18-11-15 18:21:25) is basically in %y-%m-%d %T format. Following format specifiers can be used:
%d Day of the month as a numeric value (01 to 31)
%m Month name as a numeric value (00 to 12)
%y Year as a numeric, 2-digit value
%T Time in 24 hour format (hh:mm:ss)
The query to update the date would look as follows:
UPDATE invoices
SET created = STR_TO_DATE(created, '%y-%m-%d %T');
Now, you can use Alter Table to change the data type from Text type to Datetime.
ALTER TABLE invoices
MODIFY COLUMN created datetime;
The best thing to do here is to not store your dates as text. Assuming you have already done this, we can cope by calling STR_TO_DATE to generate a bona fide date:
SELECT
STR_TO_DATE(created, '%y-%m-%d %h:%i:%s') AS created_out
FROM yourTable;
Since the output you expect is standard date output, we can stop here and avoid also calling DATE_FORMAT to generate a different output.
you want to convert output or database records ? for second you can use sql query :
UPDATE 'table_name' SET 'created' = CONCAT('20', 'created')
You will need first to interchange the day with the year in the created column, as follows:
UPDATE invoices
SET created = CONCAT(SUBSTR(created, 7, 2), '-', SUBSTR(created, 4, 2), '-', SUBSTR(created, 1, 2));
Then, you convert the column to DATETIME, as follows:
ALTER TABLE invoices MODIFY created DATETIME;
Hope this helps.

What date time datatype i should use to insert date like March2016 in mysql?

As i am trying to insert the date 'March16' which is March 2016 in mysql table x with datatype DateTime. But this gives me error incorrect date value.
Please help me . Thank you very much
'March16' is not a correct date format. You need to do STR_TO_DATE() or DATE_FORMAT().
Read more about above two.
If you want to insert only month and date
Mysql doc
Ranges for the month and day specifiers begin with zero due to the
fact that MySQL permits the storing of incomplete dates such as
'2014-00-00'.
This means that to store the year and month only, you
can use a DATE column and put 00 instead of the day. e.g 2013-12-00.

Store Date as mm-dd-yyyy in mysql

I am trying to store the date in mysql as mm-dd-yyyy.
The following query updates the table stores the date as 0000-00-00
UPDATE `h3`.`newbatch` SET `DateCreated` = '11-08-2013' WHERE
`newbatch`.`BatchID` =
1 AND `newbatch`.`DateCreated` = '2013-11-08' LIMIT 1
I can always use DATE_FORMAT(DateCreated,'%m %d %Y') during select but is there a way to store date in that format.
The datatype of DateCreated is Date.
I am using MySQL.
Thanks
Do not modify the storage format of a date. The format for the date data type is ISO 8601 standard for a reason. You will lose the ability to perform most date functions elegantly (without first converting to the standard date format). You do the formatting when you run a query.

convert irregular date in mysql

I am working with a mysql database that somebody else created. I have a table with two different date fields one is called eventDate and is in the format YYYY-MM-DD and the other is called creationDate and is in the format M/D/YYYY H:MM:SS AM/PM
What I want to do is query the table and return results where the eventDate is the same as the creationDate but how do I convert the creationDate into YYYY-MM-DD format?
Try STR_TO_DATE() and a format matching the one used by your creationDate strings:
SELECT
…
WHERE DATE(STR_TO_DATE(creationDate, '%c/%e/%Y %r')) = STR_TO_DATE(eventDate, '%Y-%m-%d')
Perhaps MySQL would be able to convert YYYY-MM-DD strings to dates implicitly, so the second STR_TO_DATE() call might be unnecessary.