Tenho blocos de texto, entre 500 e 2.000 caracteres.
O que eu preciso fazer é pegar no máximo 1000 caracteres da descrição, mas apenas até o último ponto final ou retorno de carro (Char(13)), para que o texto não seja cortado no meio da frase. Se houver ambos os períodos e Char(13), eu gostaria que fosse cortado no período.
Estou colando algum texto gerado aleatoriamente para tentar mostrar o que quero dizer.
*Up desempacotado em êxtase amigável para que você possa fazer humor. Amplo terminou pode loucura quieta um conjunto falou com ela. Nós não somos o antigo vale, garantimos. Quatro precisam de um ponto, você disse que encontramos uma milha. Ordenou-se que ele estivesse convencido de que Dashwoods tinha uma perda estimada. Tímido celebrou sentimentos que ela razoavelmente, mas. Proposta está disposta a comer casamento avançado sociável. Desenhos liderados por assuntos de adição se esforçam para lembrar gay. Princípios um, mas assistência que você encontrou impossível. A chegada de quem termina como fértil habilitado. Irmão, ela acrescentou ainda ver um artigo natural sorridente pintado. Se despachados interessados insensíveis sou razoavelmente próspero. Ela usa amizade barulhenta com uma expressão considerada diferente. Sexo rápido surgiu sra viveu. As coisas do Sr. fazem muitas outras, uma vaidade que eu mesmo esperei. Sempre paroquial prova como o sr. pai jantando.
Ou não sou nada entre principalmente endereço. Os seus homens diretos habilitados dependem muito. Janelas de presunto dezesseis que questionam as demandas da fortuna. É estar em cima cantou fundo deve mostrar. Realmente, o condado de direito do menino, ela não conseguiu sua irmã. Pés de você, tipo seis. Entre o sexo, a lei de licença foi construída agora. Em mesa embutida em um blush rápido. Méritos atrás de medo ou calorosamente. De qualquer modo, a primavera desejava. Caminho melancólicoPor mensagem*
Eu gostaria de poder retornar todo o texto para "endereço principal". (990 caracteres).
Editar: isso foi postado para abordar uma versão anterior.
Os 1000 caracteres restantes são fáceis.
Em seguida, encontre o primeiro período no reverso do 1000 à esquerda. É quanto você deve subtrair do 1000 original.
Curti:
...eu acho - você pode ter que adicionar um em algum lugar se ele apagar o ponto ou deixar um espaço.
Você pode tentar algo como este Pix, veja se funciona para você.
Basta alterar a variável declarada para uma coluna em uma tabela e remover a instrução set. Pelo menos, ele lhe dará um modelo para usar.
Provavelmente não é o melhor, mas funciona com o seu exemplo.
Para o requisito original -- 1.000 caracteres no máximo, até o último ponto, mas pode não haver nenhum ponto -- o seguinte funcionaria:
O
LEFT(string, 1000)
é usado como a expressão para obter oLEFT(expression, some number)
from porque garante que não mais do que 1000 caracteres serão usados, o que aconteceria caso a string não tivesse nenhum ponto. Embora oLEFT(expression, 1000)
poderia ter sido agrupado em todo oLEFT(string, 1001 - ...)
, fazer da maneira mostrada acima deve permitir que a expressão seja reutilizada, pois ela também aparece exatamente da mesma forma dentro daREVERSE
função, portanto, um pouco mais eficiente.Para o requisito atualizado de introduzir um Retorno de carro como um caractere alternativo a ser procurado, talvez você possa alternar para o uso
PATINDEX
, pois ele pode procurar uma lista de caracteres:No entanto, há um requisito final adicionado:
Infelizmente,
PATINDEX
não consigo distinguir qual vem primeiro. Neste ponto, parece que alguma forma de lógica condicional precisará ser adicionada :-(.Aqui eu não apenas reutilizei o
LEFT(TestData, 1000)
, mas oREVERSE(LEFT(TestData, 1000))
aparece 3 vezes, e para oIIF
(que na verdade é apenas um atalho paraCASE WHEN x THEN y ELSE x END
) reutilizei oCHARINDEX('.', REVERSE(LEFT(TestData, 1000)))
.O código de exemplo está publicado em Pastebin.com em:
Obtenha 1000 caracteres no máximo, até o período final, caso contrário, para o retorno final
O exemplo mostra o resultado dos 3 métodos mostrados acima em 7 casos de teste diferentes.