STR_TO_DATE替换非英语月份的名称

时间:2018-12-13 08:46:27

标签: mysql

在我的 MySQL数据库上的表中,我需要使用列sDate的值来更新列sHour Date ) varchar )。

我已经尝试过此sql查询:

UPDATE IGNORE `doTable`
SET `sDate` = STR_TO_DATE(`sHour`, '%d-%M-%Y')
WHERE
    `sDate` IS NULL;

输出为:

+-----------+------------+
| sHour     | sDate      |
+-----------+------------+
| 01-ago-18 | NULL       |
| 01-apr-18 | 2018-04-01 |
| 01-feb-18 | 2018-02-01 |
| 01-gen-18 | NULL       |
| 01-giu-18 | NULL       |
| 01-mar-18 | 2018-03-01 |
| 01-nov-18 | 2018-11-01 |
| 01-ott-18 | NULL       |
| 01-set-18 | NULL       |
| 02-ago-18 | NULL       |
+-----------+------------+
10 rows in set

问题是当行sHour不包含英语(en_US)的月份名称时。

例如该行:

+-----------+------------+
| sHour     | sDate      |
+-----------+------------+
| 01-ago-18 | NULL       |
+-----------+------------+

因为月份名称前三个字母)是ago(it_IT)而不是aug(en_US),所以不会更新。< / p>

代替行:

+-----------+------------+
| sHour     | sDate      |
+-----------+------------+
| 01-apr-18 | 2018-04-01 |
+-----------+------------+

之所以更新,是因为月份名称 -apr-前三个字母)在意大利语和英语上是一致的。

我已经尝试了成功:

SET lc_time_names = 'it_IT';

该如何解决?

1 个答案:

答案 0 :(得分:1)

在MYSQL中尝试。 希望我能帮上忙。

UPDATE `doTable`
SET `sDate` = NULL;

UPDATE IGNORE `doTable`
SET `sDate` = STR_TO_DATE(`sHour`, '%d-%M-%Y')
WHERE
    `sDate` IS NULL;

UPDATE `doTable` jjj
JOIN (
    SELECT
        STR_TO_DATE(`sMonth`, '%d-%M-%Y') AS `xDate`
    FROM
        (
            SELECT
                CASE
            WHEN SUBSTRING_INDEX(
                SUBSTRING_INDEX(`sHour`, '-' ,- 2),
                '-',
                1
            ) IN ('ago') THEN
                CONCAT(
                    SUBSTRING_INDEX(`sHour`, '-', 1),
                    '-',
                    'aug',
                    '-',
                    SUBSTRING_INDEX(`sHour`, '-' ,- 1)
                )
            WHEN SUBSTRING_INDEX(
                SUBSTRING_INDEX(`sHour`, '-' ,- 2),
                '-',
                1
            ) IN ('dic') THEN
                CONCAT(
                    SUBSTRING_INDEX(`sHour`, '-', 1),
                    '-',
                    'dec',
                    '-',
                    SUBSTRING_INDEX(`sHour`, '-' ,- 1)
                )
            WHEN SUBSTRING_INDEX(
                SUBSTRING_INDEX(`sHour`, '-' ,- 2),
                '-',
                1
            ) IN ('gen') THEN
                CONCAT(
                    SUBSTRING_INDEX(`sHour`, '-', 1),
                    '-',
                    'jan',
                    '-',
                    SUBSTRING_INDEX(`sHour`, '-' ,- 1)
                )
            WHEN SUBSTRING_INDEX(
                SUBSTRING_INDEX(`sHour`, '-' ,- 2),
                '-',
                1
            ) IN ('giu') THEN
                CONCAT(
                    SUBSTRING_INDEX(`sHour`, '-', 1),
                    '-',
                    'jun',
                    '-',
                    SUBSTRING_INDEX(`sHour`, '-' ,- 1)
                )
            WHEN SUBSTRING_INDEX(
                SUBSTRING_INDEX(`sHour`, '-' ,- 2),
                '-',
                1
            ) IN ('ott') THEN
                CONCAT(
                    SUBSTRING_INDEX(`sHour`, '-', 1),
                    '-',
                    'oct',
                    '-',
                    SUBSTRING_INDEX(`sHour`, '-' ,- 1)
                )
            WHEN SUBSTRING_INDEX(
                SUBSTRING_INDEX(`sHour`, '-' ,- 2),
                '-',
                1
            ) IN ('set') THEN
                CONCAT(
                    SUBSTRING_INDEX(`sHour`, '-', 1),
                    '-',
                    'sep',
                    '-',
                    SUBSTRING_INDEX(`sHour`, '-' ,- 1)
                )
            WHEN SUBSTRING_INDEX(
                SUBSTRING_INDEX(`sHour`, '-' ,- 2),
                '-',
                1
            ) IN ('lug') THEN
                CONCAT(
                    SUBSTRING_INDEX(`sHour`, '-', 1),
                    '-',
                    'jul',
                    '-',
                    SUBSTRING_INDEX(`sHour`, '-' ,- 1)
                )
            WHEN SUBSTRING_INDEX(
                SUBSTRING_INDEX(`sHour`, '-' ,- 2),
                '-',
                1
            ) IN ('mag') THEN
                CONCAT(
                    SUBSTRING_INDEX(`sHour`, '-', 1),
                    '-',
                    'may',
                    '-',
                    SUBSTRING_INDEX(`sHour`, '-' ,- 1)
                )
            END AS `sMonth`
        FROM
            `doTable`
        WHERE
            `sDate` IS NULL
        ) AS ttt
) AS kkk
SET jjj.`sDate` = kkk.`xDate`
WHERE
    jjj.`sDate` IS NULL;