Как записать даты SAS в Microsoft SQL Server 2016 Date
тип данных в базе данных?
Я получил данные SAS с датой sas DataEndDay
, и я хочу записать их в базу данных.Используется следующий бит (буфер предназначен только для ускорения неудачного тестирования):
libname valu oledb provider=sqloledb schema="dbo" INSERTBUFF=100
properties=("User ID"="&username." Password="&pw."
"data source" = &database.
"initial catalog"=&catalog.);
proc sql noprint;
insert into valu.Data_upload_from_me
( <some_columns...>,
<more-columns...>
,DataEndDay
)
select
<some_columns_source...>,
<more-columns_source...>
,DataEndDay
from work.SAS_data_to_publish
;quit;
Конечно, поскольку даты SAS являются числами, прямая запись потерпит неудачу.Что работает, если я жестко закодирую это как:
select
<some_columns_source...>,
<more-columns_source...>
,'2018-12-12'
from work.SAS_data_to_publish
;quit;
Но если я преобразую дату SAS в строку в шагах данных SAS:
data SAS_data_to_publish ;
set SAS_data_to_publish ;
dataEndday0 = put(DataEndDay, yymmddd10.);
DataEndDay1 = quote(dataEndday0, "'") ;
run;
и попытаюсь написать любой из них,Я получаю ошибку преобразования:
ОШИБКА: ICommand :: Ошибка выполнения.: Преобразование не удалось при преобразовании даты и / или времени из символьной строки.
Когда я выбираю строку, она выглядит довольно хорошо:
proc sql; select DataEndDay1 from SAS_data_to_publish; quit;
'2018-12-12 '
ранее мне удалось написать dateTimes с похожим фокусом, который работает:
proc format;
picture sjm
. = .
other='%Y-%0m-%0d %0H:%0M:%0S:000' (datatype=datetime)
;run;
data to_be_written;
set save.raw_data_to_be_written;
DataEndDay0 = put(dhms(DataEndDay,0,0,0), sjm. -L);
run;
Кто-нибудь сталкивался с подобными проблемами?Как я мог написать даты?Я мог бы попросить их изменить столбец на dateTime, может быть ....
Заранее спасибо.
Редактировать:
Мне удалось разработать обходной путь, который работает, но уродливо и, откровенно говоря, мне не нравится.Так получилось, что моя дата одинакова для всех строк, поэтому я могу привязать ее к макропеременной и затем использовать при записи в базу данных.
data _NULL_;
set SAS_data_to_publish;
call symput('foobar', quote( put (DataEndDay , yymmddd10. -L), "'") ) ;
run;
....
select
<some_columns_source...>,
<more-columns_source...>
,&foobar.
from work.SAS_data_to_publish
;quit;
Конечно, это немедленно завершится неудачей, если DataEndDay
изменится, но, возможно, демонстрирует, что что-то не так в Proc SQL
s предложении выбора ....
Редактировать Редактировать Вставил вопрос в SAS форумы