AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 121206
Accepted
pix1985
pix1985
Asked: 2015-11-17 01:34:35 +0800 CST2015-11-17 01:34:35 +0800 CST 2015-11-17 01:34:35 +0800 CST

Função de string para deixar 1000 à esquerda, mas apenas para o último período ou retorno de carro

  • 772

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).

sql-server sql-server-2012
  • 3 3 respostas
  • 365 Views

3 respostas

  • Voted
  1. Rob Farley
    2015-11-17T02:07:48+08:002015-11-17T02:07:48+08:00

    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:

    LEFT(@s, 
        1001-
        CHARINDEX('.', 
            REVERSE(LEFT(@s,1000))
        )
    )
    

    ...eu acho - você pode ter que adicionar um em algum lugar se ele apagar o ponto ou deixar um espaço.

    • 5
  2. Shaneis
    2015-11-17T02:07:47+08:002015-11-17T02:07:47+08:00

    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.

    declare @notes varchar(2000);
    
    set @notes = 'Up unpacked friendly ecstatic so possible humoured do. Ample ended might folly quiet one set spoke her. We no am former valley assure. Four need spot ye said we find mile. Are commanded him convinced dashwoods did estimable forfeited. Shy celebrated met sentiments she reasonably but. Proposal its disposed eat advanced marriage sociable. Drawings led greatest add subjects endeavor gay remember. Principles one yet assistance you met impossible. The who arrival end how fertile enabled. Brother she add yet see minuter natural smiling article painted. Themselves at dispatched interested insensible am be prosperous reasonably it. In either so spring wished. Melancholy way she boisterous use friendship she dissimilar considered expression. Sex quick arose mrs lived. Mr things do plenty others an vanity myself waited to. Always parish tastes at as mr father dining at. Led ask possible mistress relation elegance eat likewise debating. By message or am nothing amongst chiefly address. The its enable direct men depend highly. Ham windows sixteen who inquiry fortune demands. Is be upon sang fond must shew. Really boy law county she unable her sister. Feet you off its like like six. Among sex are leave law built now. In built table in an rapid blush. Merits behind on afraid or warmly.'
    
    select start_off = @notes;
    
    -- select length_1000 = substring(@notes, 0, 1000); -- the full 1000
    
    -- select last_full_stop = charindex('.', reverse(left(@notes, 1000))); -- use 1000 - this number to get the last full stop
    
    -- select right(left(@notes, 1000), 1); -- the character at the 1000 position
    
    select  potential_answer = 
            case when right(left(@Test, 1000), 1) = '.' then Left(@Test,1000)
            else substring(@Test, 1, 1000 - charindex('.', reverse(left(@Test, 1000))) + 1) -- add 1 to add in the full stop
            end
    

    Provavelmente não é o melhor, mas funciona com o seu exemplo.

    • 1
  3. Best Answer
    Solomon Rutzky
    2015-11-17T12:14:12+08:002015-11-17T12:14:12+08:00

    Para o requisito original -- 1.000 caracteres no máximo, até o último ponto, mas pode não haver nenhum ponto -- o seguinte funcionaria:

    LEFT(LEFT(string, 1000),
         1001 - CHARINDEX('.', REVERSE(LEFT(string, 1000))))
    

    O LEFT(string, 1000)é usado como a expressão para obter o LEFT(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 o LEFT(expression, 1000)poderia ter sido agrupado em todo o LEFT(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 da REVERSEfunçã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:

    LEFT(LEFT(string, 1000),
         1001 - PATINDEX('%[.' + CHAR(13) + ']%', REVERSE(LEFT(string, 1000))))
    

    No entanto, há um requisito final adicionado:

    Se houver ambos os períodos e Char(13), eu gostaria que fosse cortado no período.

    Infelizmente, PATINDEXnão consigo distinguir qual vem primeiro. Neste ponto, parece que alguma forma de lógica condicional precisará ser adicionada :-(.

    LEFT(LEFT(TestData, 1000), 1001 - IIF(CHARINDEX('.', REVERSE(LEFT(TestData, 1000))) > 0,
                                          CHARINDEX('.', REVERSE(LEFT(TestData, 1000))),
                                          CHARINDEX(CHAR(13), REVERSE(LEFT(TestData, 1000))))
                                         )
    

    Aqui eu não apenas reutilizei o LEFT(TestData, 1000), mas o REVERSE(LEFT(TestData, 1000))aparece 3 vezes, e para o IIF(que na verdade é apenas um atalho para CASE WHEN x THEN y ELSE x END) reutilizei o CHARINDEX('.', 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.

    • 1

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve