2017-05-09 3 views
0

私はPostgreSQL 9.3を使用しています。21117-03-04のような誤った日付のテーブルの予定に予定日という列があります。列のすべての行をデフォルトの日付に更新したいとします。その列の値に誤りがある場合は1900-01-01です。私はまだ解決策を試していません。助けてください。誤った日付の場合、デフォルト日付のPSQL列を更新

+0

関連ソリューション:http://stackoverflow.com/questions/25374707/check-whether-string-is-a-date-postgresql –

答えて

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 ; 

OR 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でない場合には1で表1から、あなたのレコードをフェッチし、DATE(DATE_COLUMN)がある として、それはnullを返しますそのレコードを特定のIDで更新します。

これが役に立ちます。

+0

私の表は、この 'SELECT patientappointmentid、interactionid、appointmentdate、appointmentreasonid、 appointmentcommentのように見え、providerid、deletereason FROM cpad.dtl_patientappointment;カーソルを更新してください –

+0

がpostgresでエラーになっています –

関連する問題