sql >> Database teknologi >  >> RDS >> Mysql

Kan mysql importere en csv- eller anden txt-fil til én kolonne?

Ja, du kan gøre det i nogle få trin:

Først Opret en midlertidig iscenesættelsestabel (lad os kalde det import ) med én kolonne, der vil indeholde linjer som rækker af kildedatafilen

CREATE TABLE `import` (
  `line` varchar(512) DEFAULT NULL
);

og indlæs data fra filen i tabellen

LOAD DATA INFILE '/path/to/your/file.txt'
INTO TABLE import
FIELDS TERMINATED BY '\n'
LINES  TERMINATED BY '\n'

Anden Forudsat at du har en måltabel (lad os kalde det words ), der ser sådan ud

CREATE TABLE `words` (
  `word` varchar(64) DEFAULT NULL
);

vi kan opdele hver linje i ord og indsætte dem i words tabel med en forespørgsel

INSERT INTO words (word)
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(line, ' ', n.n), ' ', -1) word
  FROM import CROSS JOIN 
(
   SELECT a.N + b.N * 10 + 1 n
     FROM 
    (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
   ,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
    ORDER BY n
) n
 WHERE n.n <= 1 + (LENGTH(line) - LENGTH(REPLACE(line, ' ', '')))
 ORDER BY n.n

BEMÆRK:

  • antagelsen er, at dine ord adskilles nøjagtigt med ét mellemrum
  • denne forespørgsel vil dele op til 100 ord. Hvis du har brug for mere eller mindre, kan du justere en grænse ved at redigere den indre underforespørgsel, eller hvis du importerer regelmæssigt end at overveje at bruge persisted tally(tal)-tabel i stedet.

Tredje Slip eller afkort (hvis du vil bruge det igen til at importere flere filer) i mellemtabellen

DROP TABLE import;

Her er SQLFiddle demo, der viser trin to.




  1. Hvordan finder man forskelle s/h TIMESTAMP-formatværdier i Oracle?

  2. PostgreSQL:Vis tabeller i PostgreSQL

  3. Scala Spark type mismatch fundet Enhed, påkrævet rdd.RDD

  4. Sådan rettes:JSON_VALUE Returnerer NULL med lange strenge (SQL-server)