我有一个包含三列的表格。
第一列月份的类型为tinyInt,其中包含月份(例如8月为8,12月为12)。
第二列年份的类型为smallInt,其中包含年份(例如2018年)。
第三列日期的类型为dateTime,为空,默认情况下为NULL。
.__________________________________________. | id | month | year | date | -------------------------------------------| | 1 | 7 | 2018 | NULL | -------------------------------------------| | 2 | 7 | 2018 | 2018-07-01 00:00:00 |
我要做的是获取月份和年份,将其融合以创建完整日期,并使用日期为NULL的完整日期更新日期列。
意思是在sql的帮助下从第1行转到第2行。
全日那天对我来说并不重要,因此默认情况下可以是01
甚至是20
。
在谈到SQL时,我几乎处于初学者/经验丰富的初学者级别,因为我仅作为基本用户编写简单命令来使用它,因此请耐心等待。
答案 0 :(得分:2)
您可以使用以下内容:
UPDATE table_name
SET `date` = STR_TO_DATE(CONCAT(`year`, '-', `month`, '-1'), '%Y-%c-%e')
WHERE `date` IS NULL
-- CONCAT_WS
UPDATE table_name
SET `date` = STR_TO_DATE(CONCAT_WS('-', `year`, `month`, 1), '%Y-%c-%e')
WHERE `date` IS NULL
您也可以create a VIEW
动态获取最后一列(date
),而无需UPDATE
:
CREATE VIEW v_name AS
SELECT `id`, `month`, `year`, STR_TO_DATE(CONCAT_WS('-', `year`, `month`, 1), '%Y-%c-%e') AS `date`