【问题标题】:Generate UPDATE SQL statements from a csv file从 csv 文件生成 UPDATE SQL 语句
【发布时间】:2018-10-30 13:29:08
【问题描述】:

例子:

User ID, Last Name, First Name, Start Date, End Date
    001, Pudding  , Chocolate , 10/01/2018, 10/30/2018
    002, Cake     , Carrot    , 10/06/2018, 11/07/2018
    003, Pie      , Apple     , 10/03/2018, 11/01/2018

假设我已经有 ID 为 001、002、003 的现有用户,我想更新他们的姓氏、名字、开始日期和结束日期。该表太大,无法使用“MySQL for Excel”等插件,因为我无法缩小搜索范围(上面的示例已简化)

我曾想过将其保存为 .csv,在文本编辑器中打开它并尝试查找/替换文本并形成 UPDATE 语句。但我什至不确定如何准确执行此操作。

我希望每一行都变成这样,从第一行开始:

UPDATE desserts
SET lname = "Pudding", fname = "Chocolate", startdate = "10/01/2018", enddate = "10/30/2018"
WHERE user_id = 001;

我会有几千个这样的,然后我可以在数据库中运行。

【问题讨论】:

  • 您在 Windows 上工作吗?你使用什么样的编辑器?记事本++?所有编辑器可能有不同的正则表达式实现...
  • 您好!是的,我正在使用 Windows 和 Notepad++
  • 我会使用 LOAD DATA INFILE (dev.mysql.com/doc/refman/8.0/en/load-data.html)(可以读取 CSV 文件)插入到临时表 (dev.mysql.com/doc/refman/8.0/en/create-temporary-table.html) 并编写一个更新查询,该查询连接到真实表和用户 ID 上的临时表。
  • "much too large" 意味着您应该尽快放弃 Excel、CSV、Notpad++ 等。另外学习如何编写某种使用 MySQL 作为数据存储的应用程序。
  • 要基于 Raymond 的建议,请使用“多表”UPDATE 语法。最终结果是 one CREATE TABLEone LOAD DATAone UPDATE

标签: mysql regex excel csv sql-update


【解决方案1】:

打开搜索>搜索...>在记事本++中替换

然后将其用作搜索

\s*(\d+)\s*,\s*([a-zA-Z]+)\s*,\s*([a-zA-Z]+)\s*,\s*(.+),\s*(.+)

这是替换

UPDATE desserts SET lname = "$2", fname = "$3", startdate = "$4", enddate = "$5" WHERE user_id = $1;\n

选择“正则表达式”并点击“搜索和替换”。

【讨论】:

    猜你喜欢
    • 2010-09-05
    • 2013-09-26
    • 1970-01-01
    • 2019-05-05
    • 1970-01-01
    • 2021-12-03
    • 2023-03-15
    • 2016-11-03
    • 1970-01-01
    相关资源
    最近更新 更多