mysql - STR_TO_DATE 替换非英文月份名称
问题描述
在我的MySQL 数据库表中,我需要使用列( varchar )的值更新列sDate
( Date )。sHour
我试过这个 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;
推荐阅读
- javascript - Firebase Cloud Functions 版本控制
- qt - 在 QML 中更改组合框颜色的正确方法
- php - 使用 PHP 的表 SQL
- python - 将列表列表解析为字典到熊猫 DataFrame 时忽略错误
- python - 在 Keras 模型中预测结果后,如何计算分类准确度?
- python - 没有名为“urllib3”的模块 Selenium Python
- javascript - Chrome V71 打破了扩展 JS 注入?
- php - 无法删除而不出现“未定义偏移”错误
- python - PrettyTable 的 Python 错误中的参数计数不匹配
- file - ldapsearch 格式化表输出到文件 awk