SQL Cómo capturar/verificación de un determinado texto de la columna estándar para rellenar valor para la columna calculada

0

Pregunta

En SQL Server 2016, tengo una tabla con una columna varchar (título) que tiene algunos de los valores de la siguiente

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

Quiero rellenar el valor calculado (derivada) de la columna basada en el titulo de la columna de tal manera que,

Si el título de la columna que contiene el texto E00, a continuación, sólo la derivada de la columna tendrá el E00 valor más NULL

Ejemplo,

Expected Output

Gracias

2

Mejor respuesta

2

Suponiendo que mi pregunta acerca de que el valor siempre sufijos de la cadena, o el valor que desea es siempre seguido por un paréntesis, a continuación, puede hacer lo siguiente con algunos CHARINDEXs y 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<>violín

2021-11-23 23:39:56

Gracias, @Larnu pero puedo rellenar el valor de la derivada de la columna en tiempo de ejecución. Básicamente, mientras que la creación de la tabla de sintaxis. una vez que la norma título de la columna obtiene su valor en función de la derivada de la columna debe obtener valores como E00.. o NULO.
Vikas J

¿Qué quiere decir "En tiempo de ejecución" @VikasJ ? El valor de la columna, YourColumn, se calcula en tiempo de ejecución, a la hora de ejecutar el SELECT.
Larnu

Me refiero a que quiero especificar una columna Calculada, mientras que la creación de una tabla que va a obtener un valor de E00 o NULO sobre la base del valor de la norma título de la columna.
Vikas J

Usted tendrá que tomar las expresiones en el anterior y nido de ellos, entonces, @VikasJ .
Larnu
1

Una opción sería el uso de una combinación de Charindex y Substring. Nota en el siguiente 100 sólo debe ser declarada, de la longitud de la columna - charindex siempre se detiene al final de la cadena.

Esto no requiere paréntesis final, parece que para el ú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)

Ejemplo De Violín

Actualización

Usted podría implementar la anterior como una columna calculada con la ayuda de una función de sustituir la utilización de aplicar.

Esto podría estar bien para tu caso de uso, aunque me gustaría recomendar el uso de una vista , si es posible.

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

Ver la demostración de violín 2

2021-11-23 10:22:48

Gracias, @Stu pero puedo rellenar el valor de la derivada de la columna en tiempo de ejecución. Básicamente, mientras que la creación de la tabla de sintaxis. una vez que la norma título de la columna obtiene su valor en función de la derivada de la columna debe obtener valores como E00.. o NULO.
Vikas J

@VikasJ ahora está haciendo una pregunta sobre una columna calculada - al menos este no estaba claro a partir de tu pregunta, un derivado de la columna se aplica a cualquier valor que se calcula a partir de una columna existente.
Stu

Disculpas Si mi pregunta no es clara. Pero sí, quiero especificar una columna Calculada, mientras que la creación de una tabla que va a obtener un valor de E00 o NULO sobre la base del valor de la norma título de la columna.
Vikas J

@VikasJ me han sugerido una actualización anterior
Stu

Muchas gracias @Stu, Pero cuando he añadido 2 más tipos de título no podía obtener el resultado esperado en la columna Calculada. Por favor, compruebe el pasado 2 filas de resultados. dbfiddle.reino unido/...
Vikas J

@VikasJ Mientras yo pueda enmendar hacer frente a la primera fila, su nueva segunda fila rompe las reglas que ya ha establecido, es decir, el último de la fila y ahora no tiene llave de cierre y el número no está en el final de la cadena, así que no es ninguna de las dos "patrones" que se han documentado.
Stu

acordado Es que tengo este nuevo escenario de la última fila un par de minutos atrás desde el Cliente, en el que el número podría ser al principio o al final, con o sin apoyos. Y qué cambios hacer para que la primera fila nueva a dar resultado esperado? Porque traté de hacer cambios en la regulación de la expresión de patindex %[0-9]%, pero que no funcionó bien.
Vikas J

Por lo que si ahora reemplazar el [0-9] con una llave de cierre que va a trabajar para su primera fila nueva, sin embargo, el enfoque debe ser diferente dado sus nuevos criterios. Lamentablemente esta es una movida poste de meta.
Stu

En otros idiomas

Esta página está en otros idiomas

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