mysql数据库,将文本中存储的日期(日/月/年)转换为日期时间时出现问题

qyswt5oh  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(766)

我收到一个mysql表,其中包含客户数据,结构非常糟糕,几乎所有字段都是文本。为了防止丢失数据,我创建了另一个表,试图以正确和有用的方式导入这些列。将全名拆分为姓名和姓氏列效果很好,但是当我尝试将包含dd/mm/yy日期的创建时间字段转换为datetime时,它会显示错误的数据,例如10/10/18到2010-10-18。
我已经求助于创建另一个创建时间旧的字段,复制那里的文本数据,然后通过str把它转换成其他答案建议的日期。但是,我只能把字符串放在那里,当我把整个列放进去时,它只会给我:

1411-函数str \u to \u date的datetime值“”不正确。

我假设有另一种方法/功能可以做到这一点,但我对sql不是很有经验。此外,如果您对我的代码有任何其他建议,请发表:)
我的代码在下面

TRUNCATE TABLE Facetel_bazaPGS;
INSERT INTO Facetel_bazaPGS (id,created_time_old,campaign_name,email,Imię,Nazwisko,`phone_number`,platform,Time_added)

SELECT `id`,created_time,`campaign_name`,`email`,substring_index(`full_name`, ' ',1 ),substring(`full_name` from INSTR(`full_name`, ' ') + 1),`phone_number`,`platform`,Time_added

FROM `Facetel_bazaPGS_input`;
UPDATE Facetel_bazaPGS

SET platform = Replace(REPLACE(platform, 'fb', 'Facebook') , 'ig', 'Instagram');

UPDATE Facetel_bazaPGS
SET created_time = STR_TO_DATE(`created_time_old`, '%d/%m/%y');

编辑#1:添加样本数据(由于gdpr无法给出真实数据)

+------------------+--------------+---------------+--------------------+--------------+---------------------+----------+---------------------+
|        id        | created_time | campaign_name |       email        |  full_name   |    phone_number     | platform |     Time_added      |
+------------------+--------------+---------------+--------------------+--------------+---------------------+----------+---------------------+
| 1010334092505681 | 10/10/18     | leady         | samplemail@mail.eu | Name         | your_typical_number | ig       | 2018-10-11 08:29:45 |
| 1010457652493325 | 10/10/18     | leady         | samplemail@mail.eu | Name Surname | your_typical_number | ig       | 2018-10-11 08:29:45 |
| 1010470612492029 | 10/10/18     | leady         | samplemail@mail.eu | Name Surname | your_typical_number | fb       | 2018-10-11 08:29:45 |
+------------------+--------------+---------------+--------------------+--------------+---------------------+----------+---------------------+
m528fe3b

m528fe3b1#

这个答案只是一种猜测,但它试图找到问题的根源 1411 对的调用出错 STR_TO_DATE . 我们可以尝试运行以下查询来检测您的数据库中格式错误的日期字符串 Facetel_bazaPGS_input 源表:

SELECT *
FROM Facetel_bazaPGS_input
WHERE created_time NOT REGEXP '^[0-9]{2}/[0-9]{2}/[0-9]{2}$';

这将返回任何没有 created_time 以您期望的格式。如果没有看到空的结果集,则可以修复日期字符串。
注意:刚才我看到您的错误消息似乎是说 created_time 值为空字符串或 NULL . 无论哪种情况,上述查询都应该清除这些记录。

eufgjt7s

eufgjt7s2#

再次感谢您的所有建议,我已经放弃,更改了excel中列的格式,再次导入,并要求以后的输入在“创建时间”列中使用yyyy-mm-dd格式。

相关问题