|
Wx - MS Sql Server Busca Fonetica - Function SOUNDEX( ) |
Débuté par BOLLER, 11 nov. 2016 18:28 - 21 réponses |
| |
| | | |
|
| |
Membre enregistré 3 657 messages Popularité : +175 (223 votes) |
|
Posté le 11 novembre 2016 - 18:28 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 657 messages Popularité : +175 (223 votes) |
|
Posté le 11 novembre 2016 - 20:38 |
As funções deste projeto foram desenvolvidas e adaptadas para substituir a função nativa "SOUNDEX" do SQL SERVER. A função SOUNDEX originalmente foi projetada para o idioma inglês ao utilizá-la para o português algumas particularidades do idioma não foram levados em consideração e com isso a busca perde eficácia.
"O Soundex é um índice para codificação de nomes, que se preocupa mais com o som do que com a forma de como um nome está escrito. Ele foi usado inicialmente para codificar sobrenomes (surnames) pela Administração de Arquivos e Registros Nacionais dos Estados Unidos (National Archives and Records Administration)75. Nomes que possuem o mesmo som, mas estão escritos de forma diferente, têm o mesmo código [Soundex]. O método foi criado e patenteado em 1918, por Margaret O’Dell e Robert C. Russel [Knuth 1973]. O departamento de censo dos Estados Unidos (U.S. Bureau of Census) codificou todos os registros relativos aos censos de 1880 a 1920 [Branting 2003] e [Oliveira 2007], utilizando Soundex.
O algoritmo Soundex produz um código padrão, composto pela primeira letra da palavra a ser codificada, seguida por três dígitos numéricos. Os dígitos variam de 0 a 6. Os seis números significativos representam classes fonéticas dos sons da fala humana: bilabial, labiodental, dental, alveolar, velar e glotal [Knuth 1973], [Bhagat e Hovy 2007] e [Oliveira 2007]. " [SOARES V.F.]¹
O Soundex iguala o código dos fonemas e realiza uma busca através dos códigos, sendo assim os valores "X" se igual a "CH", por exemplo. Uma breve explicação dos arquivos do projeto
01_FUNC_FONETIZAR_DDL.sql Função principal, parâmetros de entrada:
@STR VARCHAR(5000) = String de consulta @CONSULTA CHAR(1) = Deve receber "0" ou "1" @Consulta recebe 0: Resultado não adiciona caractere "%" @Consulta recebe 1: Resultado adiciona "%" para utilização da condição "like".
Ex: SELECT DBO.FUNC_FONETIZAR('TIJELA',0) Resultado: 68C8A1
SELECT DBO.FUNC_FONETIZAR('TIJELA',1) Resultado: %68C8A1%
02_FUNC_FONETIZAR_PARTICULA_DDL.sql Realiza tratamentos, atribui valores para os códigos fonéticos e iguala fonemas semelhantes.
03_FUNC_REMOVE_ACENTO_DDL.sql Remove acentos para comparações.
04_FUNC_SOMENTE_LETRAS_DDL.sql Retira caracteres especiais
05_FUNC_SUBSTITUI_TERMINACAO_DDL.sql Substitui terminações
06_FUNC_TRATA_CONSOANTE_MUDA_DDL.sql Trata consoantes mudas
07_TABLE_TESTEFONETICO.sql Tabela de teste com 29853 palavras² para testes. Abaixo alguns resultados que foram obtidos e exemplos de utilização
SELECT DBO.FUNC_FONETIZAR('ADDDRIIANO',0)
SELECT DBO.FUNC_FONETIZAR('ADRIIANO',0);
SELECT DBO.FUNC_FONETIZAR('ADRIANO',0)
SELECT * FROM TESTEFONETICO WHERE FONETIZAR = (SELECT DBO.FUNC_FONETIZAR('ADDDRIIANO',0));
SELECT * FROM TESTEFONETICO WHERE FONETIZAR = (SELECT DBO.FUNC_FONETIZAR('ADRIIANO',0));
SELECT * FROM TESTEFONETICO WHERE FONETIZAR = (SELECT DBO.FUNC_FONETIZAR('ADRIANO',0));
SELECT * FROM TESTEFONETICO WHERE FONETIZAR = (SELECT DBO.FUNC_FONETIZAR('CALSSADO',0));
SELECT * FROM TESTEFONETICO WHERE FONETIZAR = (SELECT DBO.FUNC_FONETIZAR('CAUSSADO',0));
SELECT * FROM TESTEFONETICO WHERE FONETIZAR = (SELECT DBO.FUNC_FONETIZAR('CHICARA',0));
SELECT * FROM TESTEFONETICO WHERE FONETIZAR = (SELECT DBO.FUNC_FONETIZAR('TIJELA',0));
SELECT * FROM TESTEFONETICO WHERE FONETIZAR = (SELECT DBO.FUNC_FONETIZAR('SUMISSO',0));
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 9949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 657 messages Popularité : +175 (223 votes) |
|
Posté le 11 novembre 2016 - 20:38 |
CREATE FUNCTION [dbo].[FUNC_FONETIZAR] (@STR VARCHAR(5000), @CONSULTA CHAR(1)) RETURNS VARCHAR(5000) AS BEGIN DECLARE @PARTICULA VARCHAR(5000), @FONETIZADO VARCHAR(5000), @FONETIZAR CHAR(1), @AUX VARCHAR(5000), @I INT, @CONT INT, @PREPOSICOES1 VARCHAR(1000), @PREPOSICOES2 VARCHAR(1000), @ALGROMANO1 VARCHAR(1000), @NUMERO1 VARCHAR(1000), @ALGROMANO2 VARCHAR(1000), @NUMERO2 VARCHAR(1000), @ALGROMANO3 VARCHAR(1000), @NUMERO3 VARCHAR(1000), @ALGARISMO VARCHAR(1000), @ALGARISMOEXTENSO VARCHAR(1000), @LETRAS VARCHAR(1000)
SELECT @STR = dbo.FUNC_REMOVE_ACENTO(@STR)
IF @STR = ' H ' SET @STR = ' AGA '
SELECT @STR = dbo.FUNC_SOMENTE_LETRAS(@STR)
SELECT @STR = REPLACE(@STR,' LTDA ',' ')
SET @PREPOSICOES1 = ' DE DA DO AS OS AO NA NO ' SET @PREPOSICOES2 = ' DOS DAS AOS NAS NOS COM '
SET @I = 1
WHILE @I <= 32 BEGIN SELECT @STR = REPLACE(@STR,SUBSTRING(@PREPOSICOES1,@I,4),' ') SET @I = @I + 4 END
SET @I = 1
WHILE @I <= 30 BEGIN SELECT @STR = REPLACE(@STR,SUBSTRING(@PREPOSICOES2,@I,5),' ') SET @I = @I + 5 END
SET @ALGROMANO1 = ' V I ' SET @NUMERO1 = ' 5 1 ' SET @I = 1 WHILE @I <= 6 BEGIN SELECT @STR = REPLACE(@STR,SUBSTRING(@ALGROMANO1,@I,3),SUBSTRING(@NUMERO1,@I,3)) SET @I = @I + 3 END
SET @ALGROMANO2 = ' IX VI IV II ' SET @NUMERO2 = ' 9 6 4 2 ' SET @I = 1 WHILE @I <= 16 BEGIN SELECT @STR = REPLACE(@STR,SUBSTRING(@ALGROMANO2,@I,4),SUBSTRING(@NUMERO2,@I+1,3)) SET @I = @I + 4 END
SET @ALGROMANO3 = ' VII III ' SET @NUMERO3 = ' 7 3 ' SET @I = 1 WHILE @I <= 10 BEGIN SELECT @STR = REPLACE(@STR,SUBSTRING(@ALGROMANO3,@I,5),SUBSTRING(@NUMERO3,@I+2,3)) SET @I = @I + 5 END
SELECT @STR = REPLACE(@STR,' X ',' 10 ') SELECT @STR = REPLACE(@STR,' VIII ',' 8 ')
SELECT @STR = REPLACE(@STR,'0','ZERO') SELECT @STR = REPLACE(@STR,'1','UM') SELECT @STR = REPLACE(@STR,'2','DOIS') SELECT @STR = REPLACE(@STR,'3','TRES') SELECT @STR = REPLACE(@STR,'4','QUATRO') SELECT @STR = REPLACE(@STR,'5','CINCO') SELECT @STR = REPLACE(@STR,'6','SEIS') SELECT @STR = REPLACE(@STR,'7','SETE') SELECT @STR = REPLACE(@STR,'8','OITO') SELECT @STR = REPLACE(@STR,'9','NOVE')
SET @LETRAS = ' A B C D E F G H I J K L M N O P Q R S T U V X Z W Y Ç ';
SET @I = 1 WHILE @I <= 81 BEGIN SELECT @STR = REPLACE(@STR,SUBSTRING(@ALGROMANO2,@I,3),' ') SET @I = @I + 3 END
SET @STR = LTRIM(@STR) SET @STR = RTRIM(@STR)
SET @PARTICULA = '' SET @FONETIZADO = ''
SET @CONT = 1
WHILE @CONT <= LEN(@STR)+1 BEGIN IF @CONT < LEN(@STR) + 1 BEGIN IF SUBSTRING(@STR,@CONT,1) <> ' ' BEGIN SET @PARTICULA = @PARTICULA + SUBSTRING(@STR,@CONT,1) SET @FONETIZAR = '0' END ELSE SET @FONETIZAR = '1' END ELSE SET @FONETIZAR = '1' IF @FONETIZAR = '1' BEGIN SELECT @PARTICULA = dbo.FUNC_FONETIZAR_PARTICULA(@PARTICULA) SET @FONETIZADO = @FONETIZADO + ' ' + @PARTICULA SET @PARTICULA = '' END SET @CONT = @CONT + 1 END
SET @FONETIZADO = LTRIM(@FONETIZADO) SET @FONETIZADO = RTRIM(@FONETIZADO)
IF @CONSULTA = '1' BEGIN SET @AUX = '%'
SET @I = 1
WHILE @I <= LEN(@FONETIZADO) BEGIN IF SUBSTRING(@FONETIZADO,@I,1) = ' ' SET @AUX = @AUX + '% %' ELSE SET @AUX = @AUX + SUBSTRING(@FONETIZADO,@I,1) SET @I = @I + 1 END
IF SUBSTRING(@FONETIZADO,LEN(@FONETIZADO),1) <> '%' SET @AUX = @AUX + '%'
SET @FONETIZADO = @AUX END IF @FONETIZADO = '' SET @FONETIZADO = NULL
RETURN @FONETIZADO
END
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 9949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 657 messages Popularité : +175 (223 votes) |
|
Posté le 11 novembre 2016 - 20:39 |
CREATE FUNCTION [dbo].[FUNC_FONETIZAR_PARTICULA] (@STR VARCHAR(5000)) RETURNS VARCHAR(5000) AS BEGIN DECLARE @AUX VARCHAR(5000), @AUX2 VARCHAR(5000), @I INT, @N INT, @J INT, @LETRAS VARCHAR(27), @CODFONETICO VARCHAR(27), @CARACTERES VARCHAR(1000), @CARACTERESSUB VARCHAR(1000)
SET @LETRAS = 'ABPCKQDTEIYFVWGJLMNOURSZX9Ç' SET @CODFONETICO = '123444568880AABCAEE1AIJJL9J'
SET @AUX = SUBSTRING(@STR,1,1) SET @I = 2
WHILE @I <= LEN(@STR) BEGIN IF SUBSTRING(@STR,@I - 1,1) <> SUBSTRING(@STR,@I,1) SET @AUX = @AUX + SUBSTRING(@STR,@I,1) SET @I = @I + 1 END
IF SUBSTRING(@AUX,1,1) = 'W' IF SUBSTRING(@AUX,2,1) = 'I' SET @AUX = 'U' + SUBSTRING(@AUX,2,LEN(@AUX)) ELSE IF SUBSTRING(@AUX,2,1) IN ('A','E','O','U') SET @AUX = 'V' + SUBSTRING(@AUX,2,LEN(@AUX))
SELECT @AUX = dbo.FUNC_SUBSTITUI_TERMINACAO(@AUX)
SET @CARACTERES = 'TSCHSCH TSH TCH SH CH LH NH PH GN MN SCE SCI SCY CS KS PS TS TZ XS CE CI CY GE GI GY GD CK PC QU SC SK XC SQ CT GT PT Ç ' SET @CARACTERESSUB = 'XXXXXXX XXX XXX XX XX LI NN FF NN NN SSI SSI SSI SS SS SS SS SS SS SE SI SI JE JI JI DD QQ QQ QQ SQ SQ SQ 99 TT TT TT SS '
SET @I = 1 WHILE @I <= 152 BEGIN SELECT @AUX = REPLACE(@AUX,LTRIM(RTRIM(SUBSTRING(@CARACTERES,@I,4))), LTRIM(RTRIM(SUBSTRING(@CARACTERESSUB,@I,4)))) SET @I = @I + 4 END
SELECT @AUX = dbo.FUNC_TRATA_CONSOANTE_MUDA(@AUX,'B','I') SELECT @AUX = dbo.FUNC_TRATA_CONSOANTE_MUDA(@AUX,'D','I') SELECT @AUX = dbo.FUNC_TRATA_CONSOANTE_MUDA(@AUX,'P','I')
IF SUBSTRING(@AUX,1,1) = 'H' BEGIN SET @AUX2 = SUBSTRING(@AUX,2,1) SET @J = 3 END ELSE BEGIN SET @AUX2 = SUBSTRING(@AUX,1,1) SET @J = 2 END
WHILE @J <= LEN(@AUX) BEGIN IF (((SUBSTRING(@AUX,@J - 1,1) <> SUBSTRING(@AUX,@J,1))) AND (SUBSTRING(@AUX,@J,1) <> 'H')) SET @AUX2 = @AUX2 + SUBSTRING(@AUX,@J,1) SET @J = @J + 1 END
SET @AUX = @AUX2
SET @AUX2 = ''
SET @I = 1
WHILE @I <= LEN(@AUX) BEGIN SET @N = 1 WHILE @N <= 27 BEGIN IF SUBSTRING(@AUX,@I,1) = SUBSTRING(@LETRAS,@N,1) SET @AUX2 = @AUX2 + SUBSTRING(@CODFONETICO,@N,1) SET @N = @N + 1 END SET @I = @I + 1 END
RETURN @AUX2 END
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 9949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 657 messages Popularité : +175 (223 votes) |
|
Posté le 11 novembre 2016 - 20:39 |
CREATE FUNCTION [dbo].[FUNC_REMOVE_ACENTO] ( @TEXTO VARCHAR (5000)) RETURNS VARCHAR (5000) AS BEGIN DECLARE @COMACENTOS VARCHAR(50) DECLARE @SEMACENTOS VARCHAR(50) DECLARE @QTD_TEXTO INT DECLARE @CONTADOR INT DECLARE @QTD INT DECLARE @CONT INT DECLARE @CONT_C INT DECLARE @LETRA_T VARCHAR(1) DECLARE @LETRA_C VARCHAR(1) DECLARE @RESULTADO VARCHAR(5000)
SET @COMACENTOS = 'áÁàÀâÂãÃéÉèÈêÊíÍìÌîÎóÓòÒôÔõÕúÚùÙûÛüÜ' SET @SEMACENTOS = 'AAAAAAAAEEEEEEIIIIIIOOOOOOOOUUUUUUUU' SET @QTD_TEXTO = (SELECT LEN(@TEXTO)) SET @CONTADOR = 0 SET @RESULTADO = ''
INICIO: WHILE @CONTADOR < @QTD_TEXTO BEGIN SET @CONTADOR = @CONTADOR + 1 SET @LETRA_T = (SELECT SUBSTRING(@TEXTO,@CONTADOR,1)) SET @CONT = (SELECT LEN(@COMACENTOS)) SET @QTD = 0 WHILE @QTD < @CONT BEGIN SET @QTD = @QTD + 1 SET @LETRA_C = (SELECT SUBSTRING(@COMACENTOS,@QTD,1)) IF @LETRA_C = @LETRA_T BEGIN SET @RESULTADO = @RESULTADO + (SELECT SUBSTRING(@SEMACENTOS,@QTD,1)) GOTO INICIO END ELSE BEGIN IF @QTD = @CONT SET @RESULTADO = @RESULTADO + @LETRA_T END END END
RETURN ( UPPER(@RESULTADO) ) END
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 9949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 657 messages Popularité : +175 (223 votes) |
|
Posté le 11 novembre 2016 - 20:40 |
CREATE FUNCTION [dbo].[FUNC_SOMENTE_LETRAS] ( @TEXTO VARCHAR (5000)) RETURNS VARCHAR (5000) AS BEGIN DECLARE @LETRAS VARCHAR(30) DECLARE @QTD_TEXTO INT DECLARE @CONTADOR INT DECLARE @QTD INT DECLARE @CONT INT DECLARE @CONT_C INT DECLARE @LETRA_ANT CHAR(1) DECLARE @LETRA_T CHAR(1) DECLARE @LETRA_C CHAR(1) DECLARE @RESULTADO VARCHAR(5000)
SET @LETRAS = 'ABCÇDEFGHIJKLMNOPQRSTUVXZWY ';
SET @QTD_TEXTO = (SELECT LEN(@TEXTO)) + 1 SET @CONTADOR = 0 SET @RESULTADO = '' SET @LETRA_ANT = (SELECT SUBSTRING(@TEXTO,1,1)) INICIO: WHILE @CONTADOR < @QTD_TEXTO BEGIN SET @CONTADOR = @CONTADOR + 1 SET @LETRA_T = (SELECT SUBSTRING(@TEXTO,@CONTADOR,1)) SET @CONT = (SELECT LEN(@LETRAS)) + 1 SET @QTD = 0 WHILE @QTD < @CONT BEGIN SET @QTD = @QTD + 1 SET @LETRA_C = (SELECT SUBSTRING(@LETRAS,@QTD,1)) IF @LETRA_C = @LETRA_T BEGIN IF @LETRA_ANT = ' ' AND @LETRA_T = ' ' BEGIN GOTO INICIO END ELSE BEGIN SET @RESULTADO = @RESULTADO + (SELECT SUBSTRING(@LETRAS,@QTD,1)) SET @LETRA_ANT = @LETRA_T GOTO INICIO END END END END
RETURN ( UPPER(@RESULTADO) )
END
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 9949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 657 messages Popularité : +175 (223 votes) |
|
Posté le 11 novembre 2016 - 20:40 |
CREATE FUNCTION [dbo].[FUNC_SUBSTITUI_TERMINACAO] (@STR VARCHAR(5000)) RETURNS VARCHAR(5000) AS BEGIN DECLARE @TERMINACAO VARCHAR(1000), @TERMINACAOSUB VARCHAR(1000), @TAMANHOMINSTR VARCHAR(1000), @I INT
SELECT @STR = dbo.FUNC_REMOVE_ACENTO(@STR)
SET @TERMINACAO = 'N B D T W AM OM OIMUIMCAOAO OEMONSEIAX US TH' SET @TERMINACAOSUB = 'M N N N N SSNN N N IA IS OS TI' SET @TAMANHOMINSTR = '2 3 3 3 3 2 2 2 2 3 2 2 2 2 2 2 3' SET @I = 1
LOOP: BEGIN IF RTRIM(SUBSTRING(@STR,LEN(@STR) - LEN(SUBSTRING(@TERMINACAO,@I,3)) + 1,LEN(SUBSTRING(@TERMINACAO,@I,3)))) = RTRIM(SUBSTRING(@TERMINACAO,@I,3)) AND (LEN(@STR) >= CONVERT(INT,SUBSTRING(@TAMANHOMINSTR,@I,3))) BEGIN SET @STR = SUBSTRING(@STR,1,LEN(@STR) - LEN(SUBSTRING(@TERMINACAO,@I,3))) + RTRIM(SUBSTRING(@TERMINACAOSUB,@I,3)) IF @I > 1 GOTO FIM END
SET @I = @I + 3
IF @I < 52 GOTO LOOP
END
FIM: BEGIN RETURN @STR END
END
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 9949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 657 messages Popularité : +175 (223 votes) |
|
Posté le 11 novembre 2016 - 20:41 |
CREATE FUNCTION [dbo].[FUNC_TRATA_CONSOANTE_MUDA] (@STR VARCHAR(5000), @CONSOANTE CHAR(1), @COMPLEMENTO CHAR(1)) RETURNS VARCHAR(5000) AS BEGIN DECLARE @I int, @CONTADOR int
/* PARA TODAS AS OCORRÊNCIAS DA CONSOANTE $consoante QUE NÃO ESTIVER SEGUIDA DE VOGAL, SERÁ ADICIONADO O CONTEÚDO DA VARIÁVEL $complemento NA string. */
SET @I = LEN(@STR) SET @CONTADOR = 1
LOOP: BEGIN
IF ((SUBSTRING(@STR,@CONTADOR,1) = @CONSOANTE) AND (SUBSTRING(@STR,@CONTADOR + 1,1) NOT IN ('A','E','I','O','U')))
SET @STR = SUBSTRING(@STR,1,@CONTADOR) + @COMPLEMENTO + SUBSTRING(@STR,@CONTADOR + 1,LEN(@STR))
SET @CONTADOR = @CONTADOR + 1
IF @CONTADOR <= @I GOTO LOOP
END
RETURN @STR
END
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 9949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 657 messages Popularité : +175 (223 votes) |
|
Posté le 11 novembre 2016 - 20:42 |
Use [NomeSeuDataBase] GO
create table TesteFonetico ( [PALAVRA] nvarchar (50), [PALAVRAINCORRETA] nvarchar (50), [FONETIZAR] nvarchar (50) )
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 9949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/Message modifié, 11 novembre 2016 - 20:43 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 657 messages Popularité : +175 (223 votes) |
|
Posté le 11 novembre 2016 - 20:51 |
INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ADRIANO', NULL, N'158I81E1') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZERADO', NULL, N'J8I151') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZERAR', NULL, N'J8I1I') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZERO', NULL, N'J8I1') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZERO-QUILOMETRO', NULL, N'J8I148A1E86I1') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZETA', NULL, N'J861') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZEUGMA', NULL, N'J8ABE1') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZI', NULL, N'J8') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZIBELINA', NULL, N'J828A8E1') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZIGOMA', NULL, N'J8B1E1') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZIGOTO', NULL, N'J8B161') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZIGUEZAGUE', NULL, N'J8BA8J1BA8') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZIGUEZAGUEANTE', NULL, N'J8BA8J1BA81E68') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZIGUEZAGUEAR', NULL, N'J8BA8J1BA81I') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZIGURATE', NULL, N'J8BAI168') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZIMBABUANO', NULL, N'J8E212A1E1') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZINCO', NULL, N'J8EJ1') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZIPER', NULL, N'J838I') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZIPPADO', NULL, N'J83151') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZIRCONIO', NULL, N'J8IJ1E81') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZO', NULL, N'J1') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZOADA', NULL, N'J1151') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZOAR', NULL, N'J11I') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZODIACAL', NULL, N'J1581J1A') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZODIACO', NULL, N'J1581J1') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZOEIRA', NULL, N'J188I1') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZOMBAR', NULL, N'J1E21I') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZOMBARIA', NULL, N'J1E21I81') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZOMBETEIRO', NULL, N'J1E28688I1') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZONA', NULL, N'J1E1') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZONADO', NULL, N'J1E151') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZONAL', NULL, N'J1E1A') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZONEAMENTO', NULL, N'J1E81E8E61') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZONEAR', NULL, N'J1E81I') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZONZO', NULL, N'J1EJ1') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZOO', NULL, N'J1') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZOOLOGIA', NULL, N'J1A1C81') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZOOLOGICO', NULL, N'J1A1C8J1') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZOOLOGO', NULL, N'J1A1B1') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZOOM', NULL, N'JE') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZOROASTRICO', NULL, N'J1I11J6I8J1') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZOROASTRISMO', NULL, N'J1I11J6I8JE1') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZORRA', NULL, N'J1I1') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZU', NULL, N'JA') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZULU', NULL, N'JAAA') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZUM', NULL, N'JAE') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZUMBI', NULL, N'JAE28') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZUMBIDO', NULL, N'JAE2851') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZUMBIR', NULL, N'JAE28I') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZUNIDO', NULL, N'JAE851') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZUNIR', NULL, N'JAE8I') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZUNZUM', NULL, N'JAEJAE') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZURETA', NULL, N'JAI861') INSERT [dbo].[TESTEFONETICO] ([PALAVRA], [PALAVRAINCORRETA], [FONETIZAR]) VALUES (N'ZURRAR', NULL, N'JAI1I')
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 9949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/Message modifié, 11 novembre 2016 - 20:52 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 657 messages Popularité : +175 (223 votes) |
|
Posté le 11 novembre 2016 - 20:53 |
PARA TESTAR
SELECT DBO.FUNC_FONETIZAR('ADDDRIIANO',0)
SELECT DBO.FUNC_FONETIZAR('ADRIIANO',0);
SELECT DBO.FUNC_FONETIZAR('ADRIANO',0)
SELECT * FROM TESTEFONETICO WHERE FONETIZAR = (SELECT DBO.FUNC_FONETIZAR('ADDDRIIANO',0));
SELECT * FROM TESTEFONETICO WHERE FONETIZAR = (SELECT DBO.FUNC_FONETIZAR('ADRIIANO',0));
SELECT * FROM TESTEFONETICO WHERE FONETIZAR = (SELECT DBO.FUNC_FONETIZAR('ADRIANO',0));
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 9949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 657 messages Popularité : +175 (223 votes) |
|
Posté le 11 novembre 2016 - 20:59 |
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 9949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 657 messages Popularité : +175 (223 votes) |
|
Posté le 12 novembre 2016 - 09:49 |
SOUNDEX, SOUND LIKE
SOUNDEX e SOUND LIKE retornam a representação fonética de uma seqüência de caracteres (com base em um algoritmo em inglês). SOUNDEX and SOUND LIKE return the phonetic representation of a character string (based on an English algorithm).
Use format:
SOUNDEX(string)
Sound LIKE(string)
Exemplo: O código SQL a seguir é usado para listar os clientes cujo nome foneticamente corresponde a "Henry": Example: The following SQL code is used to list the customers whose name phonetically corresponds to "Henry":
SELECT CUSTOMER.CustomerLastName FROM CUSTOMER WHERE SOUNDEX(CUSTOMER.CustomerName) = SOUNDEX('Henry')
SELECT CUSTOMER.CustomerLastName FROM CUSTOMER WHERE CUSTOMER.CustomerName SOUND LIKE 'Henry'
Nota Portugues: SOUNDEX usado em diferentes bancos de dados (HFSQL, Oracle, MySQL, ...) pode retornar resultados diferentes de acordo com o banco de dados utilizado. Acessos nativos SOUND LIKE não é suportado por Oracle, MySQL, Progress ou Informix. O SOUNDEX não é suportado pelo Informix.
Note Enghish: SOUNDEX used on different databases (HFSQL, Oracle, MySQL, ...) may return different results according to the database used. Native Accesses SOUND LIKE is not supported by Oracle, MySQL, Progress or Informix. SOUNDEX is not supported by Informix.
Mais informações: http://help.windev.com/en-US/…
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 9949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/Message modifié, 12 novembre 2016 - 09:50 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 657 messages Popularité : +175 (223 votes) |
|
Posté le 12 novembre 2016 - 09:50 |
SOUNDEX2, SOUND2 LIKE
SOUNDEX2 e SOUNDs LIKE retornam a representação fonética de uma seqüência de caracteres (com base em um algoritmo próximo ao francês). SOUNDEX2 and SOUND2 LIKE return the phonetic representation of a character string (based on an algorithm close to French).
Use format:
SOUNDEX2(string)
SOUND2 LIKE(string)
Exemplo: O código SQL a seguir é usado para listar os clientes cuja cidade foneticamente corresponde a "Montpellier": Example: The following SQL code is used to list the customers whose city phonetically corresponds to "Montpellier":
SELECT CUSTOMER.CityName FROM CUSTOMER WHERE SOUNDEX2(CUSTOMER.CityName) = SOUNDEX2('Montpellier')
SELECT CUSTOMER.CityName FROM CUSTOMER WHERE CUSTOMER.CityName SOUND2 LIKE 'Montpellier'
Nota: Acessos nativos SOUNDEX2 e SOUNDEX2 LIKE não são suportados pelo Oracle, SQL Server, MySQL, Progresso, Informix ou DB2. Native Accesses SOUNDEX2 and SOUNDEX2 LIKE are not supported by Oracle, SQL Server, MySQL, Progress, Informix or DB2.
http://help.windev.com/en-US/…
http://help.windev.com/en-US/…
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 9949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/Message modifié, 12 novembre 2016 - 09:51 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 657 messages Popularité : +175 (223 votes) |
|
Posté le 12 novembre 2016 - 10:07 |
Ok,
Me perguntaram:
E onde está a vantagem de tudo isso Adriano?
Você vai criar uma tabela auxiliar indexada nao pelo codigo do cliente/produto..., nao pelo nome, e sim pelo resultado do comando SOUNDEX.
Dentro dessa tabela terá o codigo da tabela do cliente ou do produto, isso fará com que rapidamente encontre o dado localizado, mesmo escrevendo errado.
CREATE TABLE ClientesFoneticos ( [COD_CLIENTE] INT, [FONETICO] NVARCHAR (50) )
CREATE TABLE ProdutosFoneticos ( [COD_PRODUTOS] INT, [FONETICO] NVARCHAR (50) )
Tá, Adriano e como faço a carga nessas tabelas com o código fonético?
R.:
Simples, como sempre fez, vai ler a tabela de clientes por exemplo e colocar na primeira coluna o código do cliente e no campo FONETICO, vai fazer o soundex do nome assim:
Primeiro faz a carga normal colocando no codigo e no fonetico o codigo e o nome do cliente, dessa forma:
INSERT INTO ClientesFoneticos ( COD_CLIENTE, FONETICO ) SELECT COD_CLIENTE, NOME_CLIENTE FROM TabelaClientes
UPDATE ClientesFoneticos SET FONETICO = SELECT DBO.FUNC_FONETIZAR(FONETICO,0)
Muito simples né!
OU USANDO O SOUNDEX DO PROPRIO WL
COD_CLIENTE = COD_CLIENTE FONETICO = SOUNDEX('ADRIANO BOLLER') HAdd( ClientesFoneticos )
E vai fazer a gravacao dos dados.
Tendo os dados nessa tabela auxiliar as suas buscas nos campos, autocompletes nao vao buscar na tabela de Clientes ou de produtos, vão buscar nas tabelas FONETICAS. Assim o seu sistema vai fazer buscas muito mais rápidas e mesmo errando o texto ou nao tendo certeza do que busca o usuário vai ter a informação localizada.
SIMPLES ASSIM!!!!
Qualquer dúvida entre em contato para eu explicar melhor esse conceito.
SKYPE ID: ADRIANOBOLLER
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 9949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/Message modifié, 12 novembre 2016 - 10:45 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 657 messages Popularité : +175 (223 votes) |
|
Posté le 14 mars 2017 - 21:02 |
Prezados,
Stored procedure de conversao texto para fonetica para usar na interface do sistema Ao pesquisar pela fonetica tem que fonetizar o texto para poder pesquisar, segue entao abaixo o codigo:
USE [BaseDados] GO
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO
ALTER PROCEDURE [dbo].[sp_fonetizar_string] @Texto varchar(max)
AS
SET NOCOUNT ON;
select dbo.Fonetizar(@Texto,0) as Resultado
Botão Buscar
ok is boolean
Fonetico is string
TableDeleteAll(TABLE_Busca)
sqlexecucao is string = [ exec sp_fonetizar_string '@Busca@' ]
sqlexecucao = Replace(sqlexecucao,"@Busca@",EDT_Busca, IgnoreCase+WholeWord)
dsQuery is Data Source
ok = HExecuteSQLQuery(dsQuery,ConnAsplan360,hQueryWithoutCorrection,sqlexecucao)
IF ok = True THEN FOR EACH dsQuery IF HFound(dsQuery) = True THEN Fonetico = dsQuery.Resultado
END END END
sqlexecucao = [ Select * from t0008_buscageralitens where t0008_fonetica_s like '%@Fonetico@%' ]
sqlexecucao = Replace(sqlexecucao,"@Fonetico@",Fonetico, IgnoreCase+WholeWord)
HFreeQuery(dsQuery)
ok = HExecuteSQLQuery(dsQuery,ConnAsplan360,hQueryWithoutCorrection,sqlexecucao)
IF ok = True THEN FOR EACH dsQuery IF HFound(dsQuery) = True THEN TableAdd(TABLE_Busca,dsQuery.t0008_descricao_s +TAB+ dsQuery.t0008_fonetica_s) TableDisplay(TABLE_Busca,taInit) END END END
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/Message modifié, 14 mars 2017 - 21:08 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 657 messages Popularité : +175 (223 votes) |
|
Posté le 16 mars 2017 - 17:04 |
Prezados,
Outra técnica seria trabalhando com Buscas em Catalogo Fulltext usando Brasilian 1046
Uma ou mais palavras ou frases específicas ( termo simples ) Por exemplo, "croissant" é uma palavra, e "café au lait" é uma frase. Palavras e frases como essas são chamadas de termos simples.
Na pesquisa de texto completo, uma palavra (ou token ) é uma string cujos limites são identificados por disjuntores de palavras apropriados, seguindo as regras linguísticas do idioma especificado. Uma frase válida consiste em várias palavras, com ou sem quaisquer sinais de pontuação entre elas.
Para obter mais informações, consulte Pesquisando palavras específicas ou Frases (Termo Simples) , mais adiante neste tópico. CONTAINS e CONTAINSTABLE procurar uma correspondência exata para a frase.
FREETEXT e FREETEXTTABLE quebram a frase em palavras separadas . Uma palavra ou uma frase onde as palavras começam com o texto especificado ( prefixo termo ) Para um único prefixo termo, qualquer palavra começando com o termo especificado será parte do conjunto de resultados. Por exemplo, o termo "auto *" corresponde a "automático", "automóvel", e assim por diante.
Para uma frase, cada palavra dentro da frase é considerada como um prefixo termo. Por exemplo, o termo "auto tran *" corresponde a "transmissão automática" e "transdutor de automóvel", mas não corresponde a "transmissão automática de motor".
Um termo prefixo refere-se a uma seqüência que é afixada na frente de uma palavra para produzir uma palavra derivada ou uma forma flexionada.
Para obter mais informações, consulte Realizando buscas de prefixo (Prefix Term) , mais adiante neste tópico. CONTAINS e CONTAINSTABLE Formas flexionais de uma palavra específica ( termo de geração - inflexional ) Por exemplo, procure a forma flexional da palavra "unidade". Se várias linhas da tabela incluirem as palavras "drive", "drives", "drive", "driving" e "driven", todas elas estarão no conjunto de resultados porque cada uma delas pode ser gerada de forma flexível a partir da unidade de palavra.
As formas flexionais são os diferentes tempos e conjugações de um verbo ou as formas singular e plural de um substantivo.
Para obter mais informações, consulte Pesquisando o Formulário Flexível de uma Palavra Específica (Termo de Geração) , mais adiante neste tópico. FREETEXT e FREETEXTTABLE procure por termos flexionais de todas as palavras especificadas por padrão.
CONTAINS e CONTAINSTABLE suportam um argumento INFLECTIONAL opcional. Formas sinônimas de uma palavra específica ( termo de geração - tesauro ) Por exemplo, se uma entrada, "{carro, automóvel, caminhão, van}", for adicionada a um dicionário de sinônimos, você pode pesquisar o formulário de sinônimos da palavra "carro". Todas as linhas da tabela consultada que incluem as palavras "automóvel", "caminhão", "van" ou "carro", aparecem no conjunto de resultados porque cada uma dessas palavras pertence ao conjunto de expansão de sinônimo que contém a palavra "carro".
Um dicionário de sinônimos define sinônimos definidos pelo usuário para termos.
Para obter informações sobre a estrutura de arquivos de dicionário de sinônimos, consulte Configurar e gerenciar arquivos de dicionário de sinônimos para pesquisa de texto completo . FREETEXT e FREETEXTTABLE usam o tesauro por padrão.
CONTAINS e CONTAINSTABLE suportam um argumento THESAURUS opcional. Uma palavra ou frase próxima a outra palavra ou frase ( termo de proximidade ) Por exemplo, você quer encontrar as fileiras em que a palavra "gelo" está perto da palavra "hóquei" ou em que a frase "patinagem no gelo" está perto da frase "hóquei no gelo".
Um termo de proximidade indica palavras ou frases que estão próximas umas das outras. Você também pode especificar o número máximo de termos não-pesquisa que separam o primeiro eo último termos de pesquisa. Além disso, você pode procurar palavras ou frases em qualquer ordem ou na ordem em que as especifica.
Para obter mais informações, consulte Procurar palavras próximas a outro Word com NEAR . CONTAINS e CONTAINSTABLE Palavras ou frases usando valores ponderados ( termo ponderado ) Por exemplo, em uma consulta procurando vários termos, você pode atribuir a cada palavra de pesquisa um valor de peso que indica sua importância em relação às outras palavras na condição de pesquisa. Os resultados para este tipo de consulta retornam as linhas mais relevantes primeiro, de acordo com o peso relativo que você atribuiu às palavras de pesquisa. Os conjuntos de resultados contêm documentos ou linhas contendo qualquer um dos termos especificados (ou conteúdo entre eles); Entretanto, alguns resultados serão considerados mais relevantes do que outros devido à variação nos valores ponderados associados a diferentes termos pesquisados.
Um valor de ponderação indica o grau de importância para cada palavra e frase dentro de um conjunto de palavras e frases. Um valor de peso de 0,0 é o mais baixo, e um valor de peso de 1,0 é o mais elevado.
Para maiores informações, CONTAINÁVEL Pesquise por uma palavra ou frase específica (Termo simples) Você pode usar CONTAINS , CONTAINSTABLE , FREETEXT ou FREETEXTTABLE para pesquisar uma tabela para uma frase específica .
SET ANSI_NULLS ON GO
SET QUOTED_IDENTIFIER ON GO
CREATE TABLE [dbo].[enderecoscorreios]( [Sequencial] [bigint] IDENTITY(1,1) NOT NULL, [LogradouroAbrev] [varchar](150) NULL, [Logradouro] [varchar](150) NULL, [LogradouroCompl] [varchar](150) NULL, [Fonetica] [varchar](150) NULL, [LogradouroTipo] [varchar](20) NULL, [CEP] [varchar](8) NULL, [Bairro] [varchar](150) NULL, [BairroAbrev] [varchar](150) NULL, [IDCidade] [bigint] NULL, [Cidade] [varchar](150) NULL, [SubCidadeAbrev] [varchar](150) NULL, [SubCidade] [varchar](150) NULL, [CodIBGECid] [bigint] NULL, [CodIBGEUF] [bigint] NULL, [UF] [varchar](2) NULL, CONSTRAINT [PK_Sequencial] PRIMARY KEY CLUSTERED ( [Sequencial] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]
GO
ALTER DATABASE CEP ADD FILEGROUP FulltextEnderecosCorreios GO
ALTER DATABASE CEP ADD FILE (NAME = N'EnderecosCorreios', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL13\MSSQL\DATA\EnderecosCorreios.NDF') TO FILEGROUP FulltextEnderecosCorreios GO
Create Fulltext Catalog FulltextEnderecosCorreios ON FILEGROUP FulltextEnderecosCorreios GO
Create fulltext index on [dbo].[enderecoscorreios] ( [LogradouroAbrev] language 1046, [Logradouro] language 1046, [LogradouroCompl] language 1046, [Fonetica] language 1046, [LogradouroTipo] language 1046, [CEP] language 1046, [Bairro] language 1046, [Cidade] language 1046, [SubCidadeAbrev] language 1046, [SubCidade] language 1046, [UF] language 1046 ) key index [PK_Sequencial] on FulltextEnderecosCorreios with change_tracking auto;
Exemplo de uso
SELECT Logradouro FROM enderecoscorreios WHERE CONTAINS(Logradouro, '"Manoel Ribas"') GO
SELECT Logradouro FROM enderecoscorreios WHERE CONTAINS (Logradouro, '"Ribas*"' ) //Com uso de caracteres Corringas GO
SELECT Logradouro FROM enderecoscorreios WHERE CONTAINS (LogradouroCompl, 'FORMSOF(Logradouro, "Ribas")')
Outros exemplos de uso
SELECT AddressLine1, KEY_TBL.RANK FROM Person.Address AS Address INNER JOIN CONTAINSTABLE(Person.Address, AddressLine1, 'ISABOUT ("Bay*", Street WEIGHT(0.9), View WEIGHT(0.1) ) ' ) AS KEY_TBL ON Address.AddressID = KEY_TBL.[KEY] ORDER BY KEY_TBL.RANK DESC
SELECT Description FROM Production.ProductDescription WHERE ProductDescriptionID <> 5 AND CONTAINS(Description, 'aluminum AND spindle')
SELECT BusinessEntityID, JobTitle FROM HumanResources.Employee WHERE FREETEXT(*, 'Marketing Assistant');
SELECT BusinessEntityID,JobTitle FROM HumanResources.Employee WHERE CONTAINS(JobTitle, 'Marketing OR Assistant');
SELECT BusinessEntityID,JobTitle FROM HumanResources.Employee WHERE CONTAINS(JobTitle, 'Marketing AND Assistant');
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/Message modifié, 16 mars 2017 - 17:06 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 657 messages Popularité : +175 (223 votes) |
|
Posté le 16 mars 2017 - 17:11 |
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 657 messages Popularité : +175 (223 votes) |
|
Posté le 05 avril 2017 - 19:05 |
Procedure PreencheListagem(Busca)
X is int = 0
Ok is boolean = False
TableDeleteAll(TABLE_List)
Qry_Pipe is Data Source
SQL_Execute is string = [ Select Concat('Tipo: ', t0008_tipo_s, ': Foram encontrado(s): ', COUNT(*) ,' registro(s), contendo: ', '"@Busca@"', ' na rotina: "', t0008_rotina_s, '" na tabela "', t0008_tabela_s,'" no campo "', t0008_coluna_s,'"') as Registros From t0008_buscageralcab c , t0008_buscageralitens i Where CONTAINS(t0008_descricao_s,'"@Busca@"') and i.t0008_sequencialparametro_n = c.t0008_sequencialparametro_n group by t0000_empn01_n, t0000_empn02_n, t0000_empn03_n, t0008_tipo_s, t0008_rotina_s, t0008_tabela_s, t0008_coluna_s order by t0008_tipo_s, t0008_rotina_s ]
SQL_Execute = Replace(SQL_Execute,"@Busca@",Busca,IgnoreCase+WholeWord)
Ok = HExecuteSQLQuery(Qry_Pipe,ConnAsplan360,hQueryWithoutCorrection+hQueryWithoutHFCorrection,SQL_Execute)
IF Ok = True THEN FOR EACH Qry_Pipe IF HFound(Qry_Pipe) = True THEN X += 1 TableAdd(TABLE_List, Qry_Pipe.Registros) END END END
IF X = 0 THEN Busca = Fonetizar(Busca) SQL_Execute = [ Select Concat('Tipo: ', t0008_tipo_s, ': Foram encontrado(s): ', COUNT(*) ,' registro(s), contendo: ', '"@Busca@"', ' na rotina: "', t0008_rotina_s, '" na tabela "', t0008_tabela_s,'" no campo "', t0008_coluna_s,'"') as Registros From t0008_buscageralcab c , t0008_buscageralitens i Where CONTAINS(t0008_fonetica_s,'"@Busca@"') and i.t0008_sequencialparametro_n = c.t0008_sequencialparametro_n group by t0000_empn01_n, t0000_empn02_n, t0000_empn03_n, t0008_tipo_s, t0008_rotina_s, t0008_tabela_s, t0008_coluna_s order by t0008_tipo_s, t0008_rotina_s ] SQL_Execute = Replace(SQL_Execute,"@Busca@",Busca,IgnoreCase+WholeWord) Ok = HExecuteSQLQuery(Qry_Pipe,ConnAsplan360,hQueryWithoutCorrection+hQueryWithoutHFCorrection,SQL_Execute) IF Ok = True THEN FOR EACH Qry_Pipe IF HFound(Qry_Pipe) = True THEN X += 1 TableAdd(TABLE_List, Qry_Pipe.Registros) END END END END
TableDisplay(TABLE_List,taReExecuteQuery)
TableDisplay(TABLE_List,taInit)
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 657 messages Popularité : +175 (223 votes) |
|
Posté le 05 avril 2017 - 19:05 |
Procedure Fonetizar(Palavra)
Ok is boolean = False
Qry_Pipe is Data Source
SQL_Execute is string = [ exec sp_fonetizar_string '@Palavra@' ]
SQL_Execute = Replace(SQL_Execute,"@Palavra@",Palavra,IgnoreCase+WholeWord)
Ok = HExecuteSQLQuery(Qry_Pipe,ConnAsplan360,hQueryWithoutCorrection+hQueryWithoutHFCorrection,SQL_Execute)
IF Ok = True THEN FOR EACH Qry_Pipe IF HFound(Qry_Pipe) = True THEN Palavra = Qry_Pipe.Fonetizado END END END
RESULT Palavra
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 657 messages Popularité : +175 (223 votes) |
|
Posté le 30 août 2017 - 05:13 |
arr_Resultados is array of string
gsValorMemorizado is string = 1
DeclareWebserviceContext(gsValorMemorizado)
DeclareWebserviceContext(arr_Resultados)
Procedure Ws_BuscaEndereco(Token, Endereco)
arrResultado is array of string ok is boolean = False X is int = 0 nTokenOk is int = 0 sTabela is string = "Enderecos" Resultado is string = "" sErro is string = "" GloToken is string = ""
OkConn is boolean = False
OkConn = HConnectionOpen(MyHfsql)
ok = HExecuteQuery(QRY_Select_Cliente,hQueryWithoutHFCorrection,Token)
IF ok = True THEN FOR EACH QRY_Select_Cliente IF HFound(QRY_Select_Cliente) = True AND Token = QRY_Select_Cliente.Token THEN GloToken = QRY_Select_Cliente.Token ELSE GloToken = "" END END END
IF Token <> "" AND Token = GloToken IF OkConn = True THEN ok = HExecuteQuery(QRY_Select_Cliente,MyHfsql,hQueryWithoutHFCorrection,Token) IF ok = True THEN FOR EACH QRY_Select_Cliente IF HFound(QRY_Select_Cliente) = True THEN ok = HExecuteQuery(QRY_Select_CEP,MyHfsql,hQueryWithoutCorrection,Endereco) IF ok =True THEN Resultado = "<Xml><Retorno>" FOR EACH QRY_Select_CEP IF HFound(QRY_Select_CEP) = True AND X = 0 X += 1 Resultado += ws_xml_registro_comeco(X) Resultado += ws_xml_registro_corpo(QRY_Select_CEP.Sequencial,"Sequencial") Resultado += ws_xml_registro_corpo(QRY_Select_CEP.LogradouroUpper,"LogradouroUpper") Resultado += ws_xml_registro_corpo(QRY_Select_CEP.LogradouroAbrev,"LogradouroAbrev") Resultado += ws_xml_registro_corpo(QRY_Select_CEP.Logradouro,"Logradouro") Resultado += ws_xml_registro_corpo(QRY_Select_CEP.LogradouroCompl,"LogradouroCompl") Resultado += ws_xml_registro_corpo(QRY_Select_CEP.Fonetica,"Fonetica") Resultado += ws_xml_registro_corpo(QRY_Select_CEP.LogradouroTipo,"LogradouroTipo") Resultado += ws_xml_registro_corpo(QRY_Select_CEP.CEP,"CEP") Resultado += ws_xml_registro_corpo(QRY_Select_CEP.Bairro,"Bairro") Resultado += ws_xml_registro_corpo(QRY_Select_CEP.BairroAbrev,"BairroAbrev") Resultado += ws_xml_registro_corpo(QRY_Select_CEP.IDCidade,"IDCidade") Resultado += ws_xml_registro_corpo(QRY_Select_CEP.Cidade,"Cidade") Resultado += ws_xml_registro_corpo(QRY_Select_CEP.SubCidadeAbrev,"SubCidadeAbrev") Resultado += ws_xml_registro_corpo(QRY_Select_CEP.SubCidade,"SubCidade") Resultado += ws_xml_registro_corpo(QRY_Select_CEP.CodIBGECid,"CodIBGECid") Resultado += ws_xml_registro_corpo(QRY_Select_CEP.CodIBGEUF,"CodIBGEUF") Resultado += ws_xml_registro_corpo(QRY_Select_CEP.UF,"UF") Resultado += ws_xml_registro_corpo(QRY_Select_CEP.Pais,"Pais") Resultado += ws_xml_registro_corpo(QRY_Select_CEP.LogradouroIniciais,"LogradouroIniciais") Resultado += ws_xml_registro_corpo(QRY_Select_CEP.NumeroInicial,"NumeroInicial") Resultado += ws_xml_registro_corpo(QRY_Select_CEP.NumeroFinal,"NumeroFinal") Resultado += ws_xml_registro_corpo(QRY_Select_CEP.DMSLatitude,"DMSLatitude") Resultado += ws_xml_registro_corpo(QRY_Select_CEP.DMSLongitude,"DMSLongitude") Resultado += ws_xml_registro_corpo(QRY_Select_CEP.GDLatitude,"GDLatitude") Resultado += ws_xml_registro_corpo(QRY_Select_CEP.GDLongitude,"GDLongitude") Resultado += ws_xml_registro_final() END END IF X = 0 THEN Resultado = ws_zero_registros(sTabela) END Resultado += "<TOTAL>"+X+"</TOTAL>" Resultado += "</Retorno></Xml>" ELSE Resultado += "<Error>Erro 002 tabela<Error>" END ELSE Resultado += "<Error>Erro 003 tabela<Error>" END END ELSE Resultado += "<Error>Erro 004 tabela<Error>" END ELSE Resultado += "<Error>Erro 005 Conexao<Error>" END ip is string = WebserviceClientIPAddress(False) ok = HExecuteQuery(QRY_Insert_Log,hQueryWithoutHFCorrection,DateSys()+TimeSys(),ip,Token,Endereco) HReset(QRY_Select_CEP)
HReset(QRY_Select_Cliente) HConnectionClose(ConnNativa) ELSE Resultado += "<Error>Token invalido<Error>" END
nTamanho is int = Length(Resultado)
Add(arrResultado,Resultado)
RESULT (arrResultado)
SELECT enderecoscorreios.Sequencial AS Sequencial, enderecoscorreios.LogradouroUpper AS LogradouroUpper, enderecoscorreios.LogradouroAbrev AS LogradouroAbrev, enderecoscorreios.Logradouro AS Logradouro, enderecoscorreios.LogradouroCompl AS LogradouroCompl, enderecoscorreios.Fonetica AS Fonetica, enderecoscorreios.LogradouroTipo AS LogradouroTipo, enderecoscorreios.CEP AS CEP, enderecoscorreios.Bairro AS Bairro, enderecoscorreios.BairroAbrev AS BairroAbrev, enderecoscorreios.IDCidade AS IDCidade, enderecoscorreios.Cidade AS Cidade, enderecoscorreios.SubCidadeAbrev AS SubCidadeAbrev, enderecoscorreios.SubCidade AS SubCidade, enderecoscorreios.CodIBGECid AS CodIBGECid, enderecoscorreios.CodIBGEUF AS CodIBGEUF, enderecoscorreios.UF AS UF, enderecoscorreios.Pais AS Pais, enderecoscorreios.LogradouroIniciais AS LogradouroIniciais, enderecoscorreios.NumeroInicial AS NumeroInicial, enderecoscorreios.NumeroFinal AS NumeroFinal, enderecoscorreios.DMSLatitude AS DMSLatitude, enderecoscorreios.DMSLongitude AS DMSLongitude, enderecoscorreios.GDLatitude AS GDLatitude, enderecoscorreios.GDLongitude AS GDLongitude, MATCH(enderecoscorreios.LogradouroUpper, enderecoscorreios.LogradouroAbrev, enderecoscorreios.Logradouro, enderecoscorreios.LogradouroCompl, enderecoscorreios.Fonetica, enderecoscorreios.LogradouroTipo, enderecoscorreios.CEP, enderecoscorreios.Bairro, enderecoscorreios.BairroAbrev, enderecoscorreios.Cidade, enderecoscorreios.SubCidadeAbrev, enderecoscorreios.SubCidade, enderecoscorreios.UF, enderecoscorreios.Pais, enderecoscorreios.LogradouroIniciais) AGAINST({ParamKFulltext}) AS FullTextPertinence FROM enderecoscorreios WHERE FullTextPertinence > {ParamFullTextPertinence} ORDER BY FullTextPertinence DESC
SELECT clientes.id AS id, clientes.Nome AS Nome, clientes.Email AS Email, clientes.Celular AS Celular, clientes.Token AS Token FROM clientes WHERE clientes.Token = {ParamToken}
INSERT INTO wslog ( datahora, ip, Token, acao ) VALUES ( {Paramdatahora}, {Paramip}, {ParamToken}, {Paramacao} )
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 657 messages Popularité : +175 (223 votes) |
|
Posté le 30 août 2017 - 05:47 |
| |
| |
| | | |
|
| | | | |
| | |
|