There is a column in a table with dates called 'date_activated'. I would like to add a column and use the information from the 'date_activated' to produce a datetime format that sets to the first day of the year.
For example:
id | date_activated | datetime |
---|---|---|
1. | 2016-05-12 | 2016-01-01 0:00:00 |
2. | 2019-05-16 | 2019-01-01 0:00:00 |
CodePudding user response:
First, ALTER
your table to add your additional column:
ALTER TABLE sample_table
ADD COLUMN `datetime` timestamp AFTER date_activated;
Note: your newly created column named datetime
is a Keyword in MySQL. It is not advised to name things after Keywords or Reserved Words.
Next, UPDATE
your column using an INNER JOIN
to self-join your tables in order to get the year from the date_activated
column:
UPDATE sample_table a
INNER JOIN sample_table b ON a.id = b.id
SET b.datetime = CONCAT(YEAR(b.date_activated), '-01-01 00:00:00')
Using YEAR()
, you can extract the year from date_activated
then CONCAT
it with '-01-01 00:00:00'
to fit your new timestamp
columns format.
If you're just trying to add it to your SELECT
statement without altering or updating your table:
SELECT id,
date_activated,
CONCAT(YEAR(date_activated), '-01-01 00:00:00') AS datetime
FROM sample_table
Input:
id | date_activated |
---|---|
1 | 2016-05-12 |
2 | 2019-05-16 |
Output:
id | date_activated | datetime |
---|---|---|
1 | 2016-05-12 | 2016-01-01 00:00:00 |
2 | 2019-05-16 | 2019-01-01 00:00:00 |
db<>fiddle here.
CodePudding user response:
Here is the query:
select
*,
cast(concat(year(date_activated), '-1-1') as datetime) 'datetime'
from
t;
and matching output:
id | date_activated | datetime |
---|---|---|
1 | 2016-05-12 | 2016-01-01 00:00:00 |
2 | 2019-05-16 | 2019-01-01 00:00:00 |
If you want to alter the table you do that, then update the column with the cast
expression.