diff --git a/all.sas b/all.sas index 2c58470..c9474ef 100644 --- a/all.sas +++ b/all.sas @@ -3591,10 +3591,13 @@ run; options: @li SAS (default) - suitable for regular proc sql @li PGSQL - Used for Postgres databases + @param [in] applydttm= (YES) If YES, any columns using datetime formats will + be converted to native DB datetime literals

SAS Macros

@li mf_existfileref.sas @li mf_getvarcount.sas + @li mf_getvarformat.sas @li mf_getvarlist.sas @li mf_getvartype.sas @@ -3603,6 +3606,7 @@ run; **/ %macro mp_ds2inserts(ds, outref=0,schema=0,outds=0,flavour=SAS,maxobs=max + ,applydttm=YES )/*/STORE SOURCE*/; %if not %sysfunc(exist(&ds)) %then %do; @@ -3680,10 +3684,11 @@ data _null_; length _____str $32767; format _numeric_ best.; format _character_ ; - %local i comma var vtype; + %local i comma var vtype vfmt; %do i=1 %to %sysfunc(countw(&varlist)); %let var=%scan(&varlist,&i); %let vtype=%mf_getvartype(&ds,&var); + %let vfmt=%upcase(%mf_getvarformat(&ds,&var,force=1)); %if &i=1 %then %do; %if &flavour=SAS %then %do; put "insert into &schema.&outds set "; @@ -3713,7 +3718,12 @@ data _null_; %end; %else %if &flavour=PGSQL %then %do; if missing(&var) then put 'NULL'; - else put &var; + %if &applydttm=YES and "%substr(&vfmt,1,8)"="DATETIME" %then %do; + else put "TIMESTAMP '" &var E8601DT25.6 "'"; + %end; + %else %do; + else put &var; + %end; %end; %end; %else %do; @@ -5725,6 +5735,8 @@ select distinct lowcase(memname) @param [out] outref= Output fileref in which to create the insert statements. If it exists, it will be appended to, otherwise it will be created. @param [out] schema= (0) The schema of the target database, or the libref. + @param [in] applydttm= (YES) If YES, any columns using datetime formats will + be converted to native DB datetime literals @version 9.2 @author Allan Bowe @@ -5735,6 +5747,7 @@ select distinct lowcase(memname) ,outref=0 ,schema=0 ,maxobs=max + ,applydttm=YES )/*/STORE SOURCE*/; /* Find the tables */ @@ -5764,6 +5777,7 @@ select distinct lowcase(memname) ,outds=&ds ,flavour=&flavour ,maxobs=&maxobs + ,applydttm=&applydttm ) %end; diff --git a/base/mp_ds2inserts.sas b/base/mp_ds2inserts.sas index f444482..0043ae2 100644 --- a/base/mp_ds2inserts.sas +++ b/base/mp_ds2inserts.sas @@ -25,10 +25,13 @@ options: @li SAS (default) - suitable for regular proc sql @li PGSQL - Used for Postgres databases + @param [in] applydttm= (YES) If YES, any columns using datetime formats will + be converted to native DB datetime literals

SAS Macros

@li mf_existfileref.sas @li mf_getvarcount.sas + @li mf_getvarformat.sas @li mf_getvarlist.sas @li mf_getvartype.sas @@ -37,6 +40,7 @@ **/ %macro mp_ds2inserts(ds, outref=0,schema=0,outds=0,flavour=SAS,maxobs=max + ,applydttm=YES )/*/STORE SOURCE*/; %if not %sysfunc(exist(&ds)) %then %do; @@ -114,10 +118,11 @@ data _null_; length _____str $32767; format _numeric_ best.; format _character_ ; - %local i comma var vtype; + %local i comma var vtype vfmt; %do i=1 %to %sysfunc(countw(&varlist)); %let var=%scan(&varlist,&i); %let vtype=%mf_getvartype(&ds,&var); + %let vfmt=%upcase(%mf_getvarformat(&ds,&var,force=1)); %if &i=1 %then %do; %if &flavour=SAS %then %do; put "insert into &schema.&outds set "; @@ -147,7 +152,12 @@ data _null_; %end; %else %if &flavour=PGSQL %then %do; if missing(&var) then put 'NULL'; - else put &var; + %if &applydttm=YES and "%substr(&vfmt,1,8)"="DATETIME" %then %do; + else put "TIMESTAMP '" &var E8601DT25.6 "'"; + %end; + %else %do; + else put &var; + %end; %end; %end; %else %do; diff --git a/base/mp_lib2inserts.sas b/base/mp_lib2inserts.sas index 86ef6d2..84b5fc0 100644 --- a/base/mp_lib2inserts.sas +++ b/base/mp_lib2inserts.sas @@ -28,6 +28,8 @@ @param [out] outref= Output fileref in which to create the insert statements. If it exists, it will be appended to, otherwise it will be created. @param [out] schema= (0) The schema of the target database, or the libref. + @param [in] applydttm= (YES) If YES, any columns using datetime formats will + be converted to native DB datetime literals @version 9.2 @author Allan Bowe @@ -38,6 +40,7 @@ ,outref=0 ,schema=0 ,maxobs=max + ,applydttm=YES )/*/STORE SOURCE*/; /* Find the tables */ @@ -67,6 +70,7 @@ select distinct lowcase(memname) ,outds=&ds ,flavour=&flavour ,maxobs=&maxobs + ,applydttm=&applydttm ) %end;