SQL Como capturar/verificação de um determinado texto de coluna padrão para preencher o valor para a coluna calculada

0

Pergunta

No SQL Server 2016, eu tenho uma tabela com uma coluna varchar (título), que tem alguns dos valores como abaixo

title
ProALPHA - S - HTML Custom Table implementation (E001445)
IKA CP Implementation (Aus) (E001534-0001)
Test Engagment Integration: (E001637-0003) Non-billable
Customer requests customization for Analytics and Java Migration - E000797
Create list with customers renewing in H2 2020

Quero preencher o valor calculado (derivada) de coluna com base no acima exposto título de coluna, de tal forma que,

Descobrir Se o título da coluna contém o texto E00, em seguida, apenas a coluna derivada terá a E00 valor else NULL

Exemplo,

Expected Output

Obrigado

2

Melhor resposta

2

Supondo que a minha pergunta sobre de que o valor sempre sufixos de seqüência de caracteres, ou o valor que você deseja é sempre seguido por um parêntese à direita, em seguida, você pode fazer o seguinte com alguns CHARINDEXs e SUBSTRING:

USE Sandbox;
GO

SELECT V.Title,
       SUBSTRING(V.Title,E.CI,RP.CI - E.CI) AS YourColumn
FROM (VALUES('ProALPHA - S - HTML Custom Table implementation (E001445)'),
            ('IKA CP Implementation (Aus) (E001534-0001)'),
            ('Test Engagment Integration: (E001637-0003) Non-billable'),
            ('Customer requests customization for Analytics and Java Migration - E000797'),
            ('Create list with customers renewing in H2 2020'))V(Title)
      CROSS APPLY (VALUES(NULLIF(CHARINDEX('E00',V.Title),0)))E(CI)
      CROSS APPLY (VALUES(ISNULL(NULLIF(CHARINDEX(')',V.Title,E.CI),0),LEN(V.Title)+1)))RP(CI);

db<>violino

2021-11-23 23:39:56

Obrigado, @Larnu mas posso preencher o valor da coluna derivada no tempo de execução. Basicamente, enquanto a criação de tabela de sintaxe. uma vez que o padrão do título da coluna recebe o seu valor com base no que coluna derivada deve obter valores como E00.. ou NULO.
Vikas J

O que você quer dizer "Em tempo de execução" @VikasJ ? O valor da coluna, YourColumn, é calculado em tempo de execução; o tempo que você executar o SELECT.
Larnu

Eu quero dizer que eu quero para especificar uma coluna Computada durante a criação de uma tabela que irá obter um valor de E00 ou NULO com base no valor do padrão do título da coluna.
Vikas J

Você vai precisar de tomar as expressões acima e aninhá-los em seguida, @VikasJ .
Larnu
1

Uma opção seria a utilização de uma combinação de Charindex e Substring. Tenha em atenção o seguinte 100 deve ser apenas o comprimento declarado da coluna - charindex sempre irá parar no final da seqüência de caracteres.

Isso não requer parêntese final, ele olha para o último dígito.

with t as (
    select * from (values 
        ('ProALPHA - S - HTML Custom Table implementation (E001445)'                                    ),
        ('IKA CP Implementation (Aus) (E001534-0001)'                                                                   ),
        ('Test Engagment Integration: (E001637-0003) Non-billable'                                      ),
        ('Customer requests customization for Analytics and Java Migration - E000797'   ),
        ('Create list with customers renewing in H2 2020'                                                           )
    )t(title)
)
select title, 
   Iif(title like '%E00%',Reverse(Substring(part,patindex('%[0-9]%',part),100)),null)
from t
cross apply (values( Reverse(Substring(t.title, CharIndex('E00',t.title), 100 )) ))x(part)

Exemplo De Mexer

Atualização

Você pode implementar o acima como uma coluna calculada com a ajuda de uma função para substituir o uso de aplicar.

Isso pode ser bom para o seu caso de uso, embora eu recomendo usar um modo de exibição , se possível.

create function dbo.E00_Part(@title varchar(100))
returns varchar(100)
as
begin
    return (select Reverse(Substring(@title, CharIndex('E00',@title), 100 )))
end

create table T (title varchar(100), 
  Computed as Iif(title like '%E00%',
    Reverse(Substring(dbo.E00_Part(title),patindex('%[0-9]%',dbo.E00_Part(title)),100)),null))

Veja demo violino 2

2021-11-23 10:22:48

Obrigado, @Stu, mas posso preencher o valor da coluna derivada no tempo de execução. Basicamente, enquanto a criação de tabela de sintaxe. uma vez que o padrão do título da coluna recebe o seu valor com base no que coluna derivada deve obter valores como E00.. ou NULO.
Vikas J

@VikasJ agora você está perguntando uma pergunta diferente sobre uma coluna calculada pelo menos isso não era clara a sua pergunta, um derivado da coluna aplica-se para qualquer valor calculado a partir de uma coluna existente.
Stu

Desculpas, Se a minha pergunta não foi clara. Mas sim, eu quero para especificar uma coluna Computada durante a criação de uma tabela que irá obter um valor de E00 ou NULO com base no valor do padrão do título da coluna.
Vikas J

@VikasJ eu ter sugerido uma atualização acima
Stu

Muito obrigado @Stu, Mas quando eu adicionei mais 2 tipos de título, não consegui o resultado esperado na coluna Calculada. Por favor, verifique as 2 últimas linhas resultados. dbfiddle.reino unido/...
Vikas J

@VikasJ Enquanto posso alterá-lo para lidar com a primeira linha nova, sua segunda linha nova quebra as regras já estabelecidas, ou seja, a última linha agora não tem chave de fechamento e o número não está no fim da cadeia de caracteres, então não é dos "dois padrões" você tem documentado.
Stu

acordado É que eu tenho esse novo cenário da última linha de alguns minutos volta do Cliente, em que o número poderia ser no início ou no final, com ou sem chaves. E que mudanças fazer para fazer a primeira nova linha para dar o resultado esperado? Porque eu tentei fazer alterações no Reg expressão de patindex %[0-9]%, mas que não funcionou bem.
Vikas J

Então, se você substituir o [0-9] com uma chave de fechamento que irá trabalhar para a sua primeira linha, no entanto, a abordagem deve ser diferente, uma vez seus novos critérios. Infelizmente esta é uma movido a trave.
Stu

Em outros idiomas

Esta página está em outros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................