gpt4 book ai didi

mysql - STR_TO_DATE 替换非英文月份名称

转载 作者:可可西里 更新时间:2023-11-01 07:38:17 27 4
gpt4 key购买 nike

在我的 MySQL 数据库 表中,我需要更新列 sDate ( Date ) 与列 sHour 的值( 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 ).

代替行:

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

更新是因为月份名称 -apr- (前三个字母)在意大利语和英语上重合。

我试过没有成功:

SET lc_time_names = 'it_IT';

如何解决这个问题?

最佳答案

在 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;

关于mysql - STR_TO_DATE 替换非英文月份名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53758004/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com