{"id":1457,"date":"2022-05-05T16:44:33","date_gmt":"2022-05-05T19:44:33","guid":{"rendered":"https:\/\/gladiston.net.br\/?page_id=1457"},"modified":"2023-12-04T11:20:16","modified_gmt":"2023-12-04T14:20:16","slug":"retornando-apenas-digitos-validos-de-uma-string","status":"publish","type":"page","link":"https:\/\/gladiston.net.br\/en\/banco-de-dados\/retornando-apenas-digitos-validos-de-uma-string\/","title":{"rendered":"Retornando apenas d\u00edgitos v\u00e1lidos de uma string"},"content":{"rendered":"<p>As vezes precisamos retirar de uma string apenas seus d\u00edgitos v\u00e1lidos, por exemplo, considere o numero de telefone informado como &#8216;(11)5555-4444&#8217; e que tal pud\u00e9ssemos ter apenas a por\u00e7\u00e3o num\u00e9rica que nos interessa, ou seja, 1155554444?<\/p>\n\n\n\n<p>Mas imagine ainda que no caso de um telefone algu\u00e9m informe algo como &#8216;INTL +55(11)5555-4444&#8217; e que nessa situa\u00e7\u00e3o queremos apenas os d\u00edgitos num\u00e9ricos, mas mantendo o &#8220;+&#8221; que \u00e9 significativo para liga\u00e7\u00f5es internacionais deixando-o assim &#8216;+551155554444&#8217;.<\/p>\n\n\n\n<p>Vamos imaginar mais uma vez, o telefone ainda \u00e9 o mesmo, isto \u00e9,   &#8216;INTL +55(11)5555-4444&#8217;, mas que dessa vez nos interessa al\u00e9m dos d\u00edgitos num\u00e9ricos, tamb\u00e9m &#8220;+&#8221;, &#8220;(&#8220;. &#8220;)&#8221; e &#8220;-&#8220;deixando-o assim &#8216;+55(11)5555-4444&#8217;.<\/p>\n\n\n\n<p>Claro que este foi apenas um exemplo com telefone, mas as aplica\u00e7\u00f5es s\u00e3o v\u00e1rias, especialmente para remover d\u00edgitos que n\u00e3o s\u00e3o interessantes em mascaras de CEP, CNPJ, CPF e outros. \u00c9 para isso que criei a SQL Function chamada de STR_DIGITS:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:false,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;sql&quot;,&quot;mime&quot;:&quot;text\/x-sql&quot;,&quot;theme&quot;:&quot;default&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:true,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;TrpContentRestriction&quot;:{&quot;restriction_type&quot;:&quot;exclude&quot;,&quot;selected_languages&quot;:[],&quot;panel_open&quot;:true},&quot;language&quot;:&quot;SQL&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;sql&quot;}\">create or alter function STR_DIGITS (\n    AParam_Value varchar(255) = '',\n    AValid_Digits varchar(127) = '0123456789')\nreturns varchar(255)\nas\ndeclare variable AReturn varchar(255);\ndeclare variable iSizeOfString integer;\ndeclare variable I integer;\ndeclare variable sOnlyChar char(1);\nBEGIN\n  -- Retorna apenas os digitos desejados de uma string, ex:\n  -- ret=Str_Digits('(11)5555-4444') \/\/ retorna 1155554444 porque o padrao \u00e9 apenas os numeros\n  -- Pode-se definir os caracteres validos, ex:\n  -- ret=STR_DIGITS('INTL +55(11)5555-4444'); -- Retorna: '551155554444'\n  -- ret=STR_DIGITS('INTL +55(11)5555-4444','+'); -- Retorna: '+551155554444'\n  -- ret=STR_DIGITS('INTL +55(11)5555-4444','+-()'); -- Retorna: '+55(11)5555-4444'\n  AReturn='';\n  AParam_Value=trim(AParam_Value);\n\n  iSizeOfString = octet_length(AParam_Value); -- character_length\n  if ((AParam_Value&lt;&gt;'') and (iSizeOfString &gt; 0)) then\n  begin\n    i = 1;\n    while (i &lt;= iSizeOfString) do\n    begin\n      sOnlyChar = substring (AParam_Value from i for 1);\n      if ( position (sOnlyChar in AValid_Digits)&gt;0 ) then\n      begin\n        AReturn = AReturn || sOnlyChar;\n      end\n      i = i + 1;\n    end\n  end\n  return AReturn;\nEND<\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Como usar<\/h2>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:false,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;sql&quot;,&quot;mime&quot;:&quot;text\/x-sql&quot;,&quot;theme&quot;:&quot;default&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:true,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;TrpContentRestriction&quot;:{&quot;restriction_type&quot;:&quot;exclude&quot;,&quot;selected_languages&quot;:[],&quot;panel_open&quot;:true},&quot;language&quot;:&quot;SQL&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;sql&quot;}\">STR_DIGITS('INTL +55(11)5555-4444'); -- Retorna: '551155554444'\nSTR_DIGITS('INTL +55(11)5555-4444','+'); -- Retorna: '+551155554444'\nSTR_DIGITS('INTL +55(11)5555-4444','+-()'); -- Retorna: '+55(11)5555-4444'\n-- Selecionando clientes onde o CNPJ tenham tra\u00e7os e pontos\nselect a.razao_social, a.cnpj from clientes a\nwhere str_digits(a.cnpj)='00000000000191'<\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>Novamente \u00e9 preciso ressaltar que usar para extrair numeros v\u00e1lidos de um telefone foi apenas um exemplo. As aplica\u00e7\u00f5es s\u00e3o ilimitadas, por exemplo remover d\u00edgitos que n\u00e3o s\u00e3o interessantes em mascaras de CEP, CNPJ, CPF e NCM. <\/p>","protected":false},"excerpt":{"rendered":"<p>As vezes precisamos retirar de uma string apenas seus d\u00edgitos v\u00e1lidos, por exemplo, considere o numero de telefone informado como &#8216;(11)5555-4444&#8217; e que tal pud\u00e9ssemos ter apenas a por\u00e7\u00e3o num\u00e9rica que nos interessa, ou seja, 1155554444? Mas imagine ainda que no caso de um telefone algu\u00e9m informe algo como &#8216;INTL +55(11)5555-4444&#8217; e que nessa situa\u00e7\u00e3o [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"parent":1109,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"templates\/template-full-width.php","meta":{"footnotes":""},"class_list":["post-1457","page","type-page","status-publish","hentry"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/pages\/1457","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/comments?post=1457"}],"version-history":[{"count":9,"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/pages\/1457\/revisions"}],"predecessor-version":[{"id":2363,"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/pages\/1457\/revisions\/2363"}],"up":[{"embeddable":true,"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/pages\/1109"}],"wp:attachment":[{"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/media?parent=1457"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}