PostgreSQL 9.3
21117-03-04
과 같은 잘못된 날짜가있는 테이블 약속에서 약속 날짜라는 열이 있습니다. 열의 모든 행을 기본 날짜로 업데이트하려고합니다. 해당 열의 값이 잘못된 날짜이면 1900-01-01
입니다. 아직 어떤 해결책도 시도하지 못했습니다. 도와주세요.잘못된 날짜 인 경우 기본 날짜로 PSQL 열 업데이트
0
A
답변
0
당신은
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `MAKE_ACCURATE_DATE`()
BEGIN
DECLARE VAR_ID varchar(100);
DECLARE VAR_DATE DATE;
DECLARE VAR_FINISHED INT(11) DEFAULT 0;
DECLARE DATABASE_CURSOR CURSOR FOR
SELECT DATE(DATE_COLUMN) DATE_COLUMN,ID
FROM YOUR_TABLE_NAME;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET VAR_FINISHED = 1;
OPEN DATABASE_CURSOR;
GET_NEXTRECORD: LOOP
FETCH DATABASE_CURSOR INTO VAR_DATE,VAR_ID;
IF VAR_FINISHED = 1 THEN
LEAVE GET_NEXTRECORD;
END IF;
IF VAR_DATE =NULL THEN
UPDATE YOUR_TABLE_NAME SET DATE_COLUMN='1900-01-01' WHERE ID=VAR_ID;
END IF;
END LOOP GET_NEXTRECORD;
CLOSE DATABASE_CURSOR;
END$$
DELIMITER ;
또는 POSTGRES
CREATE OR REPLACE FUNCTION IS_VALID_DATE(S VARCHAR) RETURNS BOOLEAN AS $$
BEGIN
PERFORM S::DATE;
RETURN TRUE;
EXCEPTION WHEN OTHERS THEN
RETURN FALSE;
END;
$$ LANGUAGE PLPGSQL;
위한 절차 아래 사용하고 아래와 같이 위의 기능에 변화를 만들 수 있습니다.
CREATE OR REPLACE FUNCTION MAKE_ACCURATE_DATE()
RETURNS void AS
$BODY$
DECLARE
RECORD RECORD;
COUNT INT;
BEGIN
COUNT=0;
FOR RECORD IN SELECT * FROM cpad.dtl_patientappointment;
LOOP
IF(!IS_VALID_DATE(RECORD.appointmentdate)) THEN
UPDATE cpad.dtl_patientappointment SET appointmentdate='1900-01-01' WHERE patientappointmentid=RECORD.patientappointmentid;
END IF;
END LOOP;
END;
$BODY$
LANGUAGE plpgsql;
그리고이 라인
SELECT MAKE_ACCURATE_DATE();
을 실행
날짜 조건을 적용한 후 proper.So하지 않은 경우 그것은 하나 테이블 하나에서 해당 기록을 가져옵니다 및 DATE(DATE_COLUMN)
이 로, 그것은 반환 널 것이다 특정 ID
으로 해당 레코드를 업데이트합니다.
희망이 도움이 될 것입니다.
+0
, appointmentcomment, 업데이트, deleteflag, 사용자 ID, providerid, deletereason FROM cpad.dtl_patientappointment; 커서를 업데이트하십시오 –
+0
postgres에서 오류가 발생했습니다. –
관련 솔루션 : http://stackoverflow.com/questions/25374707/check-whether-string-is-a-date-postgresql 내 표는이 'SELECT patientappointmentid, interactionid, appointmentdate, appointmentreasonid처럼 보이는 –