php - 如何通过 phpMyAdmin 导入日期和价格然后正确排序?

标签 php mysql sql

我是 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/

相关文章:

sql - 使用 2 个表的 Select 语句返回 400 万条记录而不是 500k

php - div 每 6 个结果在里面 PHP MYSQL

PHP/MySQL : synchronize two fields in the same table

python - 我可以在没有事务的情况下通过 sqlalchemy 执行查询吗

mysql - 更改 MySQL 表中的多个值

C# SQL 分布式事务已完成。在新事务或 NULL 事务中登记此 session

sql - Oracle 根据输入参数更新字段 A 或字段 B

php - 读取行并更改不包含某些单词且不以点结尾的行

php - 如何在 View 页面中获取多个值

mysql - 在 MariaDB 数据库中授予权限