입력 날짜 데이터 다시 포맷
저는 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
'sourcetip' 카테고리의 다른 글
matplotlib에서 동적으로 플롯 업데이트 (0) | 2023.07.22 |
---|---|
쉼표 연산자의 역할은 무엇입니까? (0) | 2023.07.22 |
Mongodb에서 두 데이터베이스 간에 $lookup 집계가 가능합니까? (0) | 2023.07.17 |
for 루프의 Python 루프 카운터 (0) | 2023.07.17 |
python's re: 문자열에 정규식 패턴이 포함된 경우 True 반환 (0) | 2023.07.17 |