sourcetip

입력 날짜 데이터 다시 포맷

fileupload 2023. 7. 22. 10:20
반응형

입력 날짜 데이터 다시 포맷

저는 59개의 열이 있는 테이블에 삽입할 수 있는 상당히 큰(200,000개 이상의 레코드) 파일을 가지고 있습니다.데이터에는 여러 DATTIME 필드가 포함되어 있습니다.입력일자는 '10/06/2019 10:45:58' 형식입니다.이러한 필드를 DATTIME(또는 TIME 필드는 내 목적과 무관하므로 DATE일 수도 있음)으로 입력하려면 어떻게 해야 합니다.

다양한 날짜 필드를 DATTIME으로 입력하면 로드 후 필드가 0000-00-00:00으로 나타납니다.데이터베이스가 입력 형식으로 수행할 작업을 모르기 때문입니다.

두 가지 접근 방식이 있지만 각각 문제가 있습니다.

전처리:
Regex를 사용하여 날짜 필드를 감지하는 스크립트를 만들고 Perl의 DateTime::와 같은 형식을 사용하여 원하는 형식으로 다시 포맷합니다.형식:DBI. 레코드에는 쉼표와 따옴표가 포함될 수 있는 자유 형식 TEXT 필드가 포함되어 있으므로 위험이 있습니다.DATE 필드를 정확하게 식별하는 것은 규모 때문에 어렵습니다.

후처리:
날짜 필드를 VARCHAR로 사용하여 테이블을 만들고 STR_을 사용합니다.TO_DATE SQL 함수는 날짜 열을 채웁니다.

INSERT INTO mytable(DATELastDetected, DATEFirstDetected) 
  SELECT STR_TO_DATE(LastDetected, '%c/%e/%Y %H:%i'), 
  STR_TO_DATE(FirstDetected, '%c/%e/%Y %H:%i') 
from mytable;

세 번째 옵션?
CREATE TABLE 문에서 해당 DATE 열에 대한 입력 데이터의 예상 형식을 지정하면 전체 토론이 원활해질 수 있는지 궁금합니다.CREATE TABLE 문에서 DATE FORMAT을 사용하는 것을 언급하는 다른 질문을 보았지만 사용할 올바른 구문을 찾지 못했습니다.

어떤 생각이든 감사합니다.

@벤-페르소닉은 그의 논평으로 그것에 대답했습니다.내 Load 문은 다음과 같습니다.

    LOAD DATA INFILE '/opt/mysql/work/report.csv'
        INTO TABLE `my_db`.`tbl_reportdata`
    CHARACTER SET utf8mb4
    FIELDS TERMINATED BY ','
        OPTIONALLY ENCLOSED BY '"'
        ESCAPED BY '"'
        LINES TERMINATED BY '\r\n'
        IGNORE 1
        LINES (`IP`,
[...]
                `OS`,
                @FirstDetectedVar,# This field is defined as DATETIME
                @LastDetectedVar, # This field is defined as DATETIME
[...]
                `Category`)
        set
        `FirstDetected` = str_to_date(@FirstDetectedVar, '%m/%d/%Y %H:%i'),
        `LastDetected` = str_to_date(@LstDetectedVar, '%m/%d/%Y %H:%i');

나는 답이 밖에 있다고 생각했습니다.이 작업 사례가 다른 사람에게 도움이 되기를 바랍니다.

언급URL : https://stackoverflow.com/questions/58528722/reformat-input-date-data

반응형