我是 MySQL 的新手,学得很快。我的主要学习目标是从一个来源导出数据,然后导入到 phpMyAdmin 中。我第一次导出的数据以以下格式传送;
Entry_Date - mm/dd/yyyy
Price - "123,456"
我本来想设置Fields TYPE;
Entry_Date type: Date
Price type: MediumInt(10) Unsigned
但是,因此,所有日期都存储为 00-00-0000 并且价格仅存储前 3 位数字(直到逗号“,”)。
如果我将 TYPE 更改为;
Entry_Date type: char(10)
Price type: varchar(10) Unsigned
现在值已正确存储,但无法对数据进行排序,因为日期和价格仅排序到第一个 '/' 和 ' , '(分别)。
我要让数据库识别正确排序的日期和价格,但首先要考虑我接收导出数据的格式?
最佳答案
我不确定这种输入格式是什么,但您可能想使用 FLOAT输入您的价格和DATE键入您的日期。这样它就会被正确排序。
您应该始终为数据库列使用正确的数据类型。请看this article进一步学习 MySQL 数据类型。
更新 #1
如果数据以 RDBMS 无法识别的错误格式指定,那么预处理输入文件以便根据 MySQL 要求重新格式化它可能是更好的方法。
但我宁愿创建一个程序来解析这样的输入文件并手动将数据插入 MySQL 数据库。这样您就可以根据需要的格式重新设置所有值的格式。
更新#2
也可以使用两列来将数据转换为所需的格式。
创建两列:
date_as_char VARCHAR(10) NOT NULL
-- 以原始格式保存您的初始日期字符串date_as_date DATE DEFAULT NULL
-- 保存转换后的值
然后,将原始字符串日期插入第一列。
之后,您可以使用以下查询将数据从 VARCHAR(10)
转换为正确的 DATE
:
UPDATE `table` T SET
T.date_as_date = STR_TO_DATE(T.date_as_char, '%m/%d/%Y')
;
最后,如果需要,您可以DROP
第一列,无需存储重复数据。
这是演示解决方案的SQL fiddle:
http://sqlfiddle.com/#!2/88e202/1
如果您的数据被转换为NULL
,那么您的初始数据和指定的解析字符串,即%m/%d/%Y
并不多。
这是 STR_TO_DATE 的文档功能。
关于php - 如何通过 phpMyAdmin 导入日期和价格然后正确排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24431401/