SQL tom, Ako zachytiť/skontrolovať konkrétny text štandardných stĺpec k naplneniu hodnotu vypočítaného stĺpca

0

Otázka

V SQL Server 2016, mám tabuľku s varchar stĺpec (hlava), ktorá má niektoré z hodnôt, ako je uvedené nižšie

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

Chcem naplniť hodnotu vypočítanú (odvodené) stĺpec na základe vyššie uvedených názov stĺpca takým spôsobom,že

Zistiť, Či je názov stĺpca obsahuje text E00 potom len odvodené stĺpci bude mať E00 iný hodnota NULL

Napríklad,

Expected Output

Vďaka

2

Najlepšiu odpoveď

2

Za predpokladu, že moja otázka o tom, že hodnota vždy prípony reťazec, alebo hodnota, ktorú chcete je vždy zakončená s. správnym zátvorka, potom môžete s niektorými CHARINDEXs a 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 - <>husle

2021-11-23 23:39:56

Vďaka, @Larnu ale môžem vyplniť hodnoty odvodené stĺpec v režime runtime. V podstate pri tvorbe tabuľky syntax. raz štandardné stĺpci názov a dostane sa jeho hodnoty na základe toho stĺpec by mal dostať hodnoty ako E00.. alebo NULL.
Vikas J

Čo máte na mysli, "V čase spustenia" @VikasJ ? Hodnota stĺpec, YourColumn, , je vypočítaná na čas spustenia, čas spustení SELECT.
Larnu

Mám na mysli chcem zadať Vypočítaný stĺpec pri vytváraní tabuľky, ktoré budú mať hodnotu E00 alebo NULL na základe hodnoty štandardný názov stĺpca.
Vikas J

Budete musieť mať vyjadrenia v texte a ich vnoriť potom, @VikasJ .
Larnu
1

Jednou možnosťou by bolo použiť kombináciu Charindex a Substring. Poznámka: v nasledujúcich 100 mali by len byť vyhlásené dĺžky kolóny - charindex bude vždy zastaviť na konci reťazca.

To nevyžaduje ukončenie zátvorka, vyzerá to na poslednej číslice.

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)

Napríklad Husle

Aktualizácia

Ste mohli vykonávať uvedené ako vypočítaný stĺpec s pomocou funkcie nahradiť používanie sa vzťahujú.

To môže byť v poriadku na vaše používanie-prípad, keď by som odporučiť cez okne ak je to vôbec možné.

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

Pozrite si demo husle 2

2021-11-23 10:22:48

Vďaka, @Stu v bratislave, ale môžem vyplniť hodnoty odvodené stĺpec v režime runtime. V podstate pri tvorbe tabuľky syntax. raz štandardné stĺpci názov a dostane sa jeho hodnoty na základe toho stĺpec by mal dostať hodnoty ako E00.. alebo NULL.
Vikas J

@VikasJ teraz ste kládli rôzne otázky o vypočítaný stĺpec - aspoň to nebolo jasné z vašej otázky, odvodené stĺpec sa vzťahuje na všetky hodnota vypočítaná z existujúceho stĺpci.
Stu

Ospravedlňujem sa, Ak moja otázka nebolo jasné. Ale áno, chcem zadať Vypočítaný stĺpec pri vytváraní tabuľky, ktoré budú mať hodnotu E00 alebo NULL na základe hodnoty štandardný názov stĺpca.
Vikas J

@VikasJ som navrhol aktualizáciu vyššie
Stu

Ďakujem @Stu, Ale keď som pridal ďalšie 2 typy hlavy som sa nemohol dostať očakávaný výstup v Vypočítaný stĺpec. Prosím, skontrolujte posledné 2 riadky výsledky. dbfiddle.uk/...
Vikas J

@VikasJ Zatiaľ čo môžem zmeniť to, aby zvládli prvý nový riadok., nové druhom riadku poruší pravidlá, ktoré ste už vytvorili, ie, posledný riadok teraz nemá uzávierky rovnátka a počet nie je na konci reťazca, takže nie je ani z "dva vzory", budete mať zdokumentované.
Stu

dohodnuté je To len to, že som dostal túto nový scenár posledného riadku pár minút späť od objednávateľa, pričom číslo môže byť na začiatku alebo na konci s alebo bez zátvoriek. A aké zmeny urobiť prvý nový riadok dať očakávaný výsledok? Pretože som sa snažil, aby zmeny v Reg vyjadrenie patindex %[0-9]%, ale že nemal fungovalo dobre.
Vikas J

Takže ak teraz nahradiť [0-9] s zatváranie rovnátka, že to bude fungovať na prvý nový riadok, ale prístup musí byť rôzna vzhľadom na vaše nové kritériá. Bohužiaľ toto je presunutý goalpost.
Stu

V iných jazykoch

Táto stránka je v iných jazykoch

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