Você está na página 1de 7

23/12/2015

Aula08UtilizandoFunesSQL|IgorBorlotBorba
Cursos

Disciplinas

Palestras

Contato

IgorBorlotBorba
MCP.NET,SCJP,SCWCD,SCBCD

CuriosidadesEducacionais

CursoseTreinamentos

PalestraseCongressos

Tecnologia.NET

Assinar

Aula08UtilizandoFunesSQL

5Votes

Objetivo
Nestaaula,oalunoteroportunidadede:
DescrevervriostiposdefunesdisponveisnoSQL
Usarfunesdedata,nmeroecaracterenasinstruesSELECT
Descreverousodasfunesdeconverso.

FunesSQL
Asfunesformamoblocodeconsultabsicomaisavanadoesousadasparamanipularvaloresdedados.Portanto,asfunessoumrecurso
avanadodoSQLepodemserusadaspararealizaroseguinte:
Executarclculosusandodados
Modificaritensdedadosindividuais
Manipularsadaparagruposdelinhas
Formatardatasenmerosparaexibio
Convertertiposdedadosdecoluna
Podemaceitarargumentosesempreretornarumvalor.

Seguir

Seguir Igor Borlot


Borba
Obtenha todo post novo
entregue na sua caixa de
entrada.
Insiraseuendereodeemail
EstruturaconceitualdeFunoSQL
Cadastreme
Asfunessedividemem:

Crie um site com WordPress.com

FunesdeUmanicalinhaessasfunesoperamsomentelinhasnicaseretornamumresultadoporlinha,logotemosfunesdeCaractere,
Nmero,Data,ConversoeGeral.
Suasprincipaiscaractersticasso:
Manipulamitensdedados
Aceitamargumentoseretornamumvalor
Agememcadalinharetornada
Retornamumresultadoporlinha
Podemmodificarotipodedado
Podemseraninhadas.
FunesdeVriaslinhasessasfunesmanipulamgruposdelinhaafimdeobterumresultadoporgrupodelinhas.
Asintaxedeumafunocompreendidapor:
1
2

SINTAXEDAFUNO
function_name(coluna/expresso,[arg1,arg2,...])

https://igorborbacom.wordpress.com/cursos/programacaoplsqlcomoracle/aula08utilizandofuncoesescalares/

1/7

23/12/2015

Aula08UtilizandoFunesSQL|IgorBorlotBorba
Vamosadentraraoassuntoportipodefuno,logotemos:
FunesdeCaractere:
FunesdeConversodeMaisculaeMinsculas
LOWER(coluna|expresso)convertevaloresdecaracterealfabticoparaletrasminsculas.
UPPER(coluna|expresso)convertevaloresdecaracterealfabticoparaletrasmaisculas.
INITCAP(coluna|expresso)convertevaloresdecaracterealfabticoparausarmaisculasnaprimeiraletradecadapalavraetodasasoutras.
FunesdeManipulaodeCaractere
CONCAT(coluna1|expresso1,coluna2|expresso2)retornaonmerodecaracteresdovalor.
SUBSTR(coluna|expresso,m[,n])retornacaracteresespecficosapartirdovalordecaracterecomenandonaposiom,atncaracteres
depois.
LENGTH(coluna|expresso)retornaonmerodecaracteresdovalor.
INSTR(coluna|expresso,m)retornaaposionumricadocaracterenomeado.
LPAD(coluna|expresso,n,string)preencheovlaordecaracterjustificadodireitaaumalarguratotaldenposiesdecaractere.
TRIM(anterior|posterior|ambos,trim_characterFROMtrim_souce)permiteorganizarcabealhosoucaracteresdefimdelinha(ouosdois)apartir
deumastringdecaractere.
Exemplificandoousodasfunesdecaractere,temos:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

USANDOAFUNOLOWER
SELECTLOWER('IGORBORLOTBORBA')FROMDUAL;>Resultado:"igorborlotborba"
USANDOAFUNOUPPER
SELECTUPPER('igorborlotborba')FROMDUAL;>Resultado:"IGORBORLOTBORBA"
USANDOAFUNOINITCAP
SELECTINITCAP('igorborlotborba')FROMDUAL;>Resultado:"IgorBorlotBorba"
USANDOAFUNOCONCAT
SELECTCONCAT('IGOR','BORBA')FROMDUAL;>Resultado:"IGORBORBA"
USANDOAFUNOSUBSTR
SELECTSUSBTR('IGOR',1,2)FROMDUAL;>Resultado:"IG"
USANDOAFUNOLENGTH
SELECTLENGTH('IGOR')FROMDUAL>Resultado:"4";
USANDOAFUNOINSTR
SELECTINSTR('IGOR','g')FROMDUAL;>Resultado:"2"
USANDOAFUNOLPAD
SELECTLPAD('2222',8,'#')FROMDUAL;>Resultado:"####2222"
USANDOAFUNOTRIM
SELECTTRIM('S'FROM'SSMITH')FROMDUAL;>Resultado:"MITH"

FunesNumricas
Asfunesnumricasaceitamentradanumricaeretornamvaloresnumricos.Estaseodescrevealgumasdasfunesnumricas:
ROUND(coluna|expresso)Arredondaacoluna,expressoouvaloreparancasasdecimaisouenforomitido,nenhumacasadecimal(Senfor
negativo,osnmerosesquerdadopontodedecimalseroarredondados).
TRUNC(coluna|expresso)Truncaacoluna,expressoouvalorparancasasdecimaisousenforomitido,nenhumacasadecimal(Senfornegativo,
osnmerosesquerdadopontodecimalserotruncadosparazero).
MOD(m,n)Retornaorestodemdivididoporn.
Exemplificandoousodasfunesdecaractere,temos:
1
2
3
4
5
6

USANDOAFUNOROUND
SELECTROUND(20.235,2)FROMDUAL;>Resultado:"20.24"
USANDOAFUNOTRUNC
SELECTTRUNC(20.235,2)FROMDUAL;>Resultado:"20.23"
USANDOAFUNOMOD
SELECTMOD(1600,300)FROMDUAL;>Resultado:"100"

FunesdeDatas
OsprodutosdaOraclearmazenamdatasemumformatonumricointerno,representandoosculo,ano,ms,dia,horas,minutosesegundos.
OformatodeentradaeexibiodefaultparaqualquerdataDDMONYY,logoasdatasvlidasparaaoOracleestoentre1dejaneiro,4712A.C.e31de
dezembro,9999D.C.
VejamosabaixoalgumasfunesdedataencontradasnoOracle:
SYSDATEafunodedataqueretornaadataehoraatual.VocpodeusaroSYDATEdamesmaformacomousuariaqualqueroutronomede
coluna.Porexemplo,possvelexibiradataatualselecionandoSYSDATEapartirdeumatabelaqualquer(incluiseatabelafictciaDUAL).
MONTHS_BETWEEN(data1,data2)Localizaonmerodemesesentreadata1eadata2.Oresultadopodeserpositivoounegativo.Seadata1for
posterioradata2,oresultadoserpositivosedata1foranterioradata2,oresultadosernegativoApartenointeiradoresultadorepresentaumaparte
doms.
ADD_MONTHS(data,n)Adicionaumnmerondemesesdecalendriodata.Ovalordendeveserinteirooupodesernegativo.
NEXT_DAY(data,char)Localizaadatadoprximodiaespecificadadataseguintedasemana(char).Ovalordecharpodeserumnmero
representadoumdiaouumastringdecaractere.
LAST_DAY(data)Localizaadatadoltimodiadomsquecontmadata.
ROUND(data[,fmt])Retornaadataarredondadaparaaunidadeespecificadapelomodelodeformatofmt.Seomodelodeformatofmtforomitido,a
dataserarredondadaparaodiamaisprximo.
TRUNC(data[,fmt])Retornaadatacomapartedahoradodiatruncadaparaaunidadeespecificadapelomodelodeformatofmt.Seomodelode
formatofmtforomitido,adatasertruncadaparaodiamaisprximo.
Exemplificandoousodasfunesdecaractere,temos:
1
2

USANDOAFUNOSYSDATE
SELECTSYSDATEFROMDUAL;>Resultado:"2011051009:00:00"(exemplificandoadatahoraatual)

https://igorborbacom.wordpress.com/cursos/programacaoplsqlcomoracle/aula08utilizandofuncoesescalares/

2/7

23/12/2015

Aula08UtilizandoFunesSQL|IgorBorlotBorba
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

SELECTSYSDATEFROMDUAL;>Resultado:"2011051009:00:00"(exemplificandoadatahoraatual)
USANDOAFUNOMONTHs_BETWEEN
SELECTMONTHS_BETWEEN('01JAN95','01JAN96')FROMDUAL;>Resultado:"12"
USANDOAFUNOADD_MONTHS
SELECTADD_MONTHS('01JAN98',6)FROMDUAL;>Resultado:"11JUL98"
USANDOAFUNONEXT_DAY
SELECTNEXT_DAY('01FEB11','FRIDAY')FROMDUAL;>Resultado:"04FEB11"
USANDOAFUNOLAST_DAY
SELECTNEXT_DAY('01SEP11')FROMDUAL;>Resultado:"30SEP11"
USANDOAFUNOROUND(1)
SELECTNEXT_DAY('25JUL95','MONTH')FROMDUAL;>Resultado:"01AUG95"
USANDOAFUNOROUND(2)
SELECTNEXT_DAY('25JUL95','YEAR')FROMDUAL;>Resultado:"01JAN96"
USANDOAFUNOTRUNC(1)
SELECTNEXT_DAY('25JUL95','MONTH')FROMDUAL;>Resultado:"01JUL95"
USANDOAFUNOTRUNC(2)
SELECTNEXT_DAY('25JUL95','YEAR')FROMDUAL;>Resultado:"01JAN95"

Aritmticacomdatas
Osbancosdedadosdedadosarmazenamdatascomonmeros,logovocpodeexecutarclculousandooperadoresaritmticoscomoadioesubtrao.
possveladicionaresubtrairconstantesdenmerobemcomodatas.Vejamosasabaixoaspossveisoperaes:
data+nmero=data.:.Nestecasoadicionaumnmerodediasparaumdata
datanmero=data.:.Nestecasosubtraiumnmerodediasdeumadata
datadata=nmerodedias.:.Nestecasosubtraiumadatadeoutra
data+nmero/24=data.:.Nestecasoadicionaumnmerodehorasparaumadata.
1
2

USANDOAFUNOSYSDATECOMOPERAESARITMTICAS
SELECT(SYSDATE2)FROMDUAL;>Resultado:"20110410"(exemplificandoadatahoraatualnmerodedias)

FunesdeConverso
AconversodedadosnoOraclepodesedarpelasseguintesformas:
Conversoimplcitadetipodedados
Conversoexplcitadetipodedados.
Paraatribuies,oOracleServerpodeconverterautomaticamente(deformaimplcita)oseguinte:
DeVARCHAR2ouCHARparaNUMBER
DeVARCHAR2ouCHARparaDATE
DeNUMBERparaVARCHAR2
DeDATEparaVARCHAR2.
Paraavaliaodaexpresso,oOracleServerpodeconverterautomaticamenteoseguinte:
DeVARCHAR2ouCHARparaNUMBER
DeVARCHAR2ouCHARparaDATE.
Conversoexplcitadetipodedados:

FunesdeConversoExpltica
OPL/SQLoferecetrsfunescomopodemosobservarnafiguraacimaparaconverterumvalordeumtipodedadosparaoutro:
TO_CHAR(nmero[data,[fmt],[nlsparams])ConverteumnmerooudataparaumastringdecaractereVARCHAR2commodelodeformatfmt.
ConvesodeNmero
Oparmetronlsparamsespecificaosseguintescaracteres,quesoretornadosporelementosdeformatodenmero:
Caracteredecimal
Separadordegrupo
Smbolodemoedalocal
Smbolodemoedainternacional.
Senlsparamsouqualqueroutroparmetroforomitido,essafunoutilizarosvaloresdeparmetrodefaultparaaseo.
ConversodeData
Oparmetronlsparamsespecificaoidiomanoqualosnomesdedias,meseseabreviaoretornam.Seesteparmetroforomitido,essa
funoutilizarosidiomasdedatadefaultparaaseo.

https://igorborbacom.wordpress.com/cursos/programacaoplsqlcomoracle/aula08utilizandofuncoesescalares/

3/7

23/12/2015

Aula08UtilizandoFunesSQL|IgorBorlotBorba
TO_NUMBER(carac,[fmt],[nlsparams])
Converteumastringdecaracterecontendodgitosparaumnmeronoformatoespecificadopelomodelodeformatoopcionalfmt.
OparmetronlsparamstemamesmafinalidadenestefunocomonafunoTO_CHARparaaconversodenmero.
TO_DATE(carac,[fmt],[nlsparams])
Converteumastringdecaractererepresentandoumadataparaumvalordedatadeacordocomofmtespecificado.
Sefmtforomitido,oformatoDDMONYY.
OparmetronlsparamspossuiamesmafinaliadenafunoTO_CHARparaaconversodedata.
UsandoafunoTO_CHARcomDatas
1
2
3
4

SINTAXEDAFUNOTO_CHAR
TO_CHAR(data,'fmt')
CONVERTENDOADATA/HORAATUALPARASTRING
SELECTTO_CHAR(SYSDATE,'DDMMYYYY')FROMDUAL>Resultado:"05032011"

Omodelodeformato:
Deveestarentreaspassimplesefazerdistinoentremaisculaseminsculas
Podeincluirqualquerelementodeformatodedatavlido
Temumelementofmtpararemoverespaospreenchidosousuprimirzerosesquerda
separadodovalordedataporumavrgula.
UsandoafunoTO_CHARcomNmeros
1
2
3
4

SINTAXEDAFUNOTO_CHAR
TO_CHAR(data,'fmt')
CONVERTENDOADATA/HORAATUALPARASTRING
SELECTTO_CHAR(3000,'$99,999')FROMDUAL>Resultado:"$3,000"

Omodelodeformato:
Deveestarentreaspassimplesefazerdistinoentremaisculaseminsculas
Podeincluirqualquerelementodeformatodenmerovlido
Temumelementofmtpararemoverespaospreenchidosousuprimirzerosesquerda
separadodovalordonmeroporumavrgula.
UsandoafunoTO_NUMEBReTO_DATE
1
2
3
4

SINTAXEDAFUNOTO_DATE
TO_DATE(carac[,'fmt'])
SINTAXEDAFUNOTO_NUMBER
TO_NUMBER(carac[,'fmt'])

Exemplosdeformatosdedatavlidos:
SCCouCCSculoPrefixosSdataACcom
AnosemdatasYYYYouSYYYYAnoPrefixosSdataACcom
YYYouYYouYltimostrs,doisouumdgitosdoano
Y,YYYAnocomvrgulanestaposio
IYYY,IYY,IY,IQuatro,trs,doisouumdgitodoanocombasenopadroISO
SYEARouYEARAnointeiroPrefixosSdataACcom
BCouADIndicadorAC/DC
B.C.ouA.D.IndicadorcompontosAC/DC
QTrimestredoano
MMMs,valordedoisdgitos
MONTHNomedomspreenchidoscomespaoslimiteanovecaracteres
MONNomedoms,abreviaodetrsletras
RMMsemnmerosromanos
WWouWSemanadoanooums
DDDouDDouDDiadoano,msousemana
DAYNomedodiapreenchidocomespaoslimitadoanovecaracteres
DYNomedodiaabreviaodetrsletras
JDiadocalendriojulianoonmerodediasdeste31dedezembro4713BC.
Exemplosdeformatosdehora:
AMouPMIndicadordemeridiano
A.M.ouP.M.Indicadordemeridianocompontos.
HHouHH12ouHH24Horasdodiaouhora(1a12)ouhora(0a23)
MIMinuto(0a59)
SSSegundo(0a59)
SSSSSSegundosapsameianoite(086399).
Exemplosdeoutrosformatos:

https://igorborbacom.wordpress.com/cursos/programacaoplsqlcomoracle/aula08utilizandofuncoesescalares/

4/7

23/12/2015

Aula08UtilizandoFunesSQL|IgorBorlotBorba
/.,Apontuaoreproduzidanoresultado
oftheAstringentreaspasreproduzidanoresultado.
Exemplosdeformatosespecificandosufixosparainfluenciarnaexibiodenmero:
THNmeroordinal(porexemplo,DDTHpara4TH)
SPNmeroporextenso(porexemplo,DDSPparaFOUR)
SPTHouTHSPNmerosordinaisporextenso(porexemplo,DDSPTHouFOURTH).
Exemplosdeformatosdenmerovlidos:
Seestiverconvertendoumnmeroparatipodedadosdecaractere,vocpodeusaroseguinteselementos:
9Posionumrica(nmerode9sdeterminamotamanhodaexibio.Exemplo:999999.Resultado:1234.
0Exibezerosesquerda.Exemplo:099999.Resultado:001234.
$Sinaldedlarflutuante.Exemplo:$999999.Resultado:$1234.
LSinaldamoedalocalflutuante.Exemplo:L999999.Resultado:FF1234.
.Pontodecimalnaposioespecificada.Exemplo:999999.99.Resultado:1234.00.
,Vrgulanaposioespecificada.Exemplo:999,999.Resultado:1,234.
MISinaisdemenosdireita(valoresnegativos).Exemplo:999999MI.Resultado:1234.
PRColocanmerosnegativosentreparnteses.Exemplo:999999PR.Resultado:(1234).
EEEENotaocientfica(formatodeveespecificarquatroEs).Exemplo:99,999EEEE.Resultado:1.234E+03.
VMultiplicapor10nvezes(n=nmerode9sapsoV).Exemplo:9999v99.Resultado:123400.
BExibevaloresdezerocomoespao,no0.Exemplo:B9999.99.Resutlado:1234.00.
Outrasfunesmuitoutilizadas:
NVL(expr1,expr2)Convertenuloparaumvalorreal.
Ostiposdedadosquepodemserusadossodata,nmeroecaractere
Dadaasintaxe,temos:
expr1ovalordeorigemouexpressoquepodeconternulo
expr2ovalordedestinoparaaconversodenulo.
Exemplificando,temos:
NUMBERNVL(number_column,9)
DATENVL(date_column,01JAN95)
CHARouVARCHAR2NVL(character_column,Unavaiable)
DECODE(col/expresso,pesquisa1,resultado1[,pesquisa2,resultado2,,][,default])Facilitaaspesquisascondicionaisrealizandootrabalhodeuma
instruoCASEouIFTHENELSE.
AfunoDECODEdecodificaumaexpressodeummodosimilaralgicaIFTHENELSEusadaemdiversaslinguagens.AfunoDECODE
decodificaaexpressoapscomparlaacadavalordepesquisa.Seexpressoformaamesmadapesquisa,oresultadoretornado.
Exemplificando,temosousodasduasfunescitadasacima:
1
2
3
4
5
6

EXEMPLODEUSODAFUNONVLCOMEXPRESSES
SELECTNVL(NULL,9)FROMDUAL;>Resultado:"9";
EXEMPLODEUSODAFUNONVLCOMCOLUNAS
SELECTCD_FUNCIONARIO,DS_FUNCIONARIO,NVL(QT_SALARIO,0)FROMFUNCIONARIO;>Resultado:"1","IGORBORLOTBORBA","0".
EXEMPLODEUSODAFUNODECODECOMCOLUNAS
SELECTCD_FUNCIONARIO,DS_FUNCIONARIO,DECODE(CD_CARGO,1,(QT_SALARIO*1),2,(QT_SALARIO*2),QT_SALARIO)FROMFUNCIONARIO;>Resultado:

AninhandoFunes
Asfunesdeumanicalinhapodemseraninhadasemqualquernvel
Funesaninhadassoavaliadasapartirdonvelmaisinternoparaonvelmaisexterno.

AninhamentodeFunes
Exemplificando,temos:
1
2

EXEMPLODEANINHAMENTODEFUNES
SELECTCD_FUNCIONARIO,NVL(TO_CHAR(DS_FUNCIONARIO),'NOINFORMADO'))FROMFUNCIONARIO>Resultado:"Senulo,resultarnovalorNOINFORM

Sumrio

https://igorborbacom.wordpress.com/cursos/programacaoplsqlcomoracle/aula08utilizandofuncoesescalares/

5/7

23/12/2015

Aula08UtilizandoFunesSQL|IgorBorlotBorba
Useasfunespararealizarasseguintesaes:
Executarclculosusandodados
Modificaritensdedadosindividuais
Manipularsadaparagruposdelinhas
Alterarformatosdedataparaexibio
Convertertiposdedadosdecoluna.

Compartilheisso:

Facebook

Curtir
Seja o primeiro a curtir este post.

Sobre

Pginas

VocsabiaquepodeescrevesuaprpriaseoSobre

Cursos

comoesta?bemfcil.VatAparnciaWidgetse

Java::DesenvolvimentodeAplicativoscom

crieumnovoWidgetTexto.Agoraomovaparaauma

JavaSwing

readewidget.

Java::DesenvolvimentoWeb

Pesquisa

Pesquisa

Java::Hibernate3
Java::Linguagem
Java::PersistnciadeDados
Aula01JavaDatabaseConnectivity(JDBC)
Aula02PadresdeProjetodeSoftware
Aula03ArquiteturadeSistemas
ClienteServidor
Aula04Trabalho
ORACLE::ProgramaoPL/SQL
Aula01VisoGeral
Aula02ConhecendoaFerramentaOracle
SQLDeveloper
Aula03CriandoeGerenciandoTabelas
comPL/SQL
Aula04Compreendendoasclusulasde
INSERT,UPDATEeDELETE
Aula05Compreendendoaclusula
deSELECT
Aula06Compreendendoas
funesagregadas
Aula07CriandoVisescomPL/SQL
Aula08UtilizandoFunesSQL
Aula09CriandoFunesSQL
Aula10OtimizandoConsultasSQL
ExemplosPrticos
TiresuaDvida
.NET::DesenvolvimentoWeb
.NET::POOC#.NET
Aula01Fundamentosdo.NETFramework
Aula02Input/Output(IO)
Aula03Pesquisando,Modificandoe
CodificandoTexto
Aula04ColeeseGenerics
Aula05Serializao
Aula06Globalizao
Aula07.NETReflection
Aula08Grficos(GDI+)
Aula09Threading
Aula10Mail
Tiresuadvida
Disciplinas
Palestras
Contato

https://igorborbacom.wordpress.com/cursos/programacaoplsqlcomoracle/aula08utilizandofuncoesescalares/

6/7

23/12/2015

Aula08UtilizandoFunesSQL|IgorBorlotBorba
OtemaTraction.

CrieumwebsiteoubloggratuitonoWordPress.com.

https://igorborbacom.wordpress.com/cursos/programacaoplsqlcomoracle/aula08utilizandofuncoesescalares/

7/7

Você também pode gostar