BookmarkSubscribeRSS Feed
Rafael_Gesta
Fluorite | Level 6

Bom dia Pessoal!

Iniciando nesse mundo do Sas, ainda aprendendo muita coisa, tenho uma dúvida que deve ser boba...

Eu tenho um Import Mysql que entre os resultados me traz uma coluna datetime, porém na formatação de data do SAS:

DT_INICIO_ENTD
26DEC22:11:35:51

Eu preciso que a coluna me traga a data no formato 

DT_INICIO_ENTD
2022-12-19T11:44:24

Eu tenho utilizado um segundo select puxando da tabela gerada o comando FORMAT, dessa maneira:
DT_INICIO_ENTD format=E8601DT20. as DT_INICIO_ENTD,

 

MInha dúvida é: Eu consigo fazer a conversão direto na query principal sem precisar fazer um novo select?

 

Meu import começa da seguinte forma:
%macro AcessoMysqlDB();
%LET AcessoMysql=--host=XXX.XX.XX.XX --user=xxxxxxxxxx --password=xxxxxxxxxxxxxx;
&AcessoMysql
%mend AcessoMysqlDB;
%ImportMysqlSelect(
SelectMySql="

/**/
Select

b.DT_INICIO_ENTD

from database.tabela b

/**/
;
",
BDMySql='',
TabelaSaidaSAS=WORK.tabela,
AcessoMysql=%AcessoMysqlDB()
);

 

Alguém tem alguma dica nesse sentido?

Muito grato

7 REPLIES 7
wilkoba
SAS Employee

@Rafael_Gesta de uma olhada na documentação sobre sobre FORMATs e INFORMATs.

Em geral, não sei exatamente seu caso, a leitura dos dados utilizando SAS/Access ou acesso direto ao MySQL irá ler os dados pelo INFORMAT e determinar isto automaticamente. mas depois você pode, na sua tabela, no SAS modificar o FORMAT para apresentar de maneira que queria.

 

Exemplo: seu INFORMAT dever algo como DDMMYYY

Neste link tem um dicionário de FORMATS: SAS Help Center: Dictionary of Formats

Neste link tem um dicionário de INFORMATS: SAS Help Center: Dictionary of Informats

Voce deve estar lendo com este INFORMAT (DATETIMEw. Informat) e o format: E8601DTw.d acredito seja o que esta buscando ISO 8601 extended notation yyyy-mm-ddThh:mm:ss.ffffff.  para apresentação.

 

Espero que tenha ajudado.

 

 

 

Rafael_Gesta
Fluorite | Level 6

Opa, tudo bem?

 

Então, eu meio que já faço esse ajuste com o FORMAT após a geração da tabela, minha dúvida seria se é possível alterar dentro do acesso ao MySQL sem precisar modificar o FORMAT posteriormente na tabela do SAS. 

Valeu pela dica Wilson, vou dar uma estudada nessa documentação de FORMAT e INFORMAT.

 

Abraços,

wilkoba
SAS Employee

@Rafael_Gesta, na sua query do MySQL talvez vc consiga colocar os formats do MySQL.

 

Encontrei isto no site do MySQL:MySQL :: MySQL 8.0 Reference Manual :: 11.2.2 The DATE, DATETIME, and TIMESTAMP Types

 

Assim quando o SAS 'ler' já estará formatado.

 

Acho que é isto então que está buscando.

 

Rafael_Gesta
Fluorite | Level 6

WIlson,

 

Vou fazendo uns testes aqui, por enquanto o SAS está trazendo a data no formato que não quero '19DEC22:11:44:24', a intenção seria evitar fazer o FORMAT posteriormente, caso fosse possível.

 

Obrigado pela orientação.

wilkoba
SAS Employee

@Rafael_Gesta; justamente isso, pelo que entendi de seu código se você utilizar no :

%ImportMysqlSelect(
SelectMySql="

/**/
Select

 CAST(b.DT_INICIO_ENTD AT TIME ZONE INTERVAL '+00:00' AS DATETIME) AS dt_no_mysql

from database.tabela b

/**/
;
"

Isto fará com que o dado venha do MySql para o SAS já no  formato sem precisar aplicar o FORMAT no SAS.

 

 

Wanderico_Icatu
Fluorite | Level 6

@Rafael_Gesta, boa tarde.

Nao sei se entendi direito, mas tenta usar a função DATEPART(). Segue exemplo:

 

/*INÍCIO - DDMMYY10. PARA DATETIME OU DATETIME PARA DDMMYY10.*/

data teste;

format data_hoje ddmmyy10. data_datetime DATETIME22.3 datetime_para_date ddmmyy10.;

data_hoje = today();
num_hoje = today();

data_datetime = dhms(today(),0,0,0);
num_datetime = dhms(today(),0,0,0);

datetime_para_date = datepart(data_datetime);

run;

 

Rafael_Gesta
Fluorite | Level 6

Bom dia @Wanderico_Icatu 

 

Então, não seria bem isso que você sugeriu, é mais na linha do que o @wilkoba mostrou, porém, não sei se é por causa do conector, mesmo colocando as funções sugeridas, a tabela SAS ainda vem no formato de data padrão, tendo que fazer o FORMAT posteriormente. Não sei dizer se é por causa da versão do conector MySQL ou uma peculiaridade do Enterprise Guide. Não é nada que eu não consiga ajustar, só queria ver se seria possível diminuir a quantidade de código utilizada na minha consulta.

 

Valeu mesmo pela ajuda pessoal!