sql >> Databáze >  >> RDS >> Database

Rozpoznávání vzoru řádků v SQL

Norma ISO/IEC 9075:2016 nebo zkráceně SQL:2016 zavádí podporu hlubokého konceptu zvaného Row Pattern Recognition (RPR) v SQL. Zveřejnil jsem návrh na vylepšení SQL Server přidáním podpory pro RPR v T-SQL, ale byl jsem dost omezený v prostoru, který jsem musel poskytnout. Účelem tohoto článku je poskytnout více podrobností o návrhu a doufáme, že se o jeho důležitosti přesvědčíte a přidáte svůj hlas.

Pozadí

Podobně jako při používání regulárních výrazů k identifikaci vzorů v řetězci, s RPR používáte regulární výrazy k identifikaci vzorů v posloupnosti řádků. Pro každou shodu vzoru můžete vrátit souhrnný řádek jako při seskupování nebo podrobné řádky s vypočítanými mírami proti dílčím sekvencím shody. RPR má neomezené praktické aplikace, včetně identifikace vzorů v akciovém trhu (jak platné vzory s obchodní hodnotou, tak potenciálně nelegální nebo podezřelé vzory), zpracování časových řad, odhalování podvodů, manipulace s materiálem, přepravní aplikace, sekvenování DNA, mezery a ostrovy, top N na skupinu a mnoho dalších.

Pro mě je RPR dalším krokem ve vývoji okenních funkcí s vyšší úrovní sofistikovanosti a rozšířeným využitím. Pokud si myslíte, že funkce okna jsou hluboké a užitečné, RPR vám opravdu upeče nudle. Podobně jako funkce okna podporuje RPR dělení a řazení. Obvykle budete hledat shody vzorů v každém oddílu nezávisle na základě uvedeného pořadí. Podobně jako u okenních funkcí se RPR hodí k dobré optimalizaci se schopností spoléhat se na řazení podle indexu, aby se zabránilo třídění dat.

Pokrytí RPR, včetně ilustrovaných příkladů, najdete v 90stránkové technické zprávě ISO/IEC TR 19075-5 (k dispozici zdarma).

Můžete jej také nalézt jako součást dokumentu ISO/IEC 9075-2:2016, Informační technologie — Databázové jazyky — SQL — Část 2:Foundation (SQL/Foundation) (lze zakoupit).

Standard SQL:2016 poskytuje dvě hlavní funkce související s RPR:

  • Funkce R010, „Rozpoznávání vzoru řádků:klauzule FROM“
  • Funkce R020, „Rozpoznávání vzoru řádků:klauzule WINDOW“

Norma také zmiňuje funkci R030, „Rozpoznávání vzorů řádků:plná podpora agregace“, bez níž agregační funkce nemohou specifikovat DISTINCT nebo .

Zatím jedinou platformou, kterou znám s implementovanou funkcí R010, je Oracle. Zatím nevím o žádné platformě, která implementovala R020.

Funkce R010, „Rozpoznávání vzoru řádků:klauzule FROM“

Funkce R010 definuje operátor klauzule/tabulky s názvem MATCH_RECOGNIZE, který používáte v klauzuli FROM. Vstupem je tabulka nebo tabulkový výraz a výstupem je virtuální tabulka. Kontext je podobný jako u jiných operátorů tabulek, jako jsou JOIN, APPLY, PIVOT a UNPIVOT. Zde je syntaxe dotazu využívajícího tuto funkci:

VYBRAT  ZE  MATCH_RECOGNIZE ( [ ROZDĚLENÍ PODLE  ] [ OBJEDNAT PODLE  ] [ MEASURES  ] [ <řádky vzoru řádků na shodu> ::=JEDEN ŘÁDEK ZA ZÁPAS | VŠECHNY ŘÁDKY ZA ZÁPAS ] [ PO ZÁPADĚ  VZOR (  ) [ PODSOUBOR  ] DEFINOVAT  ) JAKO ;

Jako příklad upravený z výše uvedené technické zprávy předpokládejme, že jste dostali tabulku dbo.Ticker se symbolem sloupců, datem obchodu a cenou. Pomocí následujícího kódu vytvořte tabulku, naplňte ji ukázkovými daty a dotazujte se:

SET NOCOUNT ON; USE tempdb; POKUD EXISTUJE TABULKU DBO.Ticker; CREATE TABLE dbo.Ticker( symbol VARCHAR(10) NOT NULL, datum obchodu NOT NULL, cena NUMERIC(12, 2) NOT NULL, CONSTRAINT PK_Ticker PRIMARY KEY (symbol, tradedate));GO INSERT INTO dbo.Ticker(symbol, tradedate) , cena) VALUES ('STOCK1', '20190212', 150,00), ('STOCK1', '20190213', 151,00), ('STOCK1', '20190214', 148,00), ('141601,02 05) ), ('STOCK1', '20190218', 142,00), ('STOCK1', '20190219', 144,00), ('STOCK1', '20190220', 152,00), ('STOCK1',021, 021.01 ('STOCK1', '20190222', 153,00), ('STOCK1', '20190225', 154,00), ('STOCK1', '20190226', 154,00), ('1'STOCK1', 27,09), 27.5.09 STOCK1', '20190228', 153,00), ('STOCK1', '20190301', 145,00), ('STOCK1', '20190304', 140,00), ('STOCK1', 3 (05'20101.01) , '20190306', 143,00), ('STOCK1', '20190307', 142,00), ('STOCK1', '20190308', 140,00), ('STOCK1', '2019038.'),'2019038.'0 20190212', 330,00), ('STOCK2', '20190213', 329,00), ('STOCK2', '20190214', 329,00), ('STOCK2', '20190215', 326,00), ('STOCK2', '20190218', 325,00), ('STOCK2', '20190219', 326,02), ('290219', 326,00), ('290200), ('290200) , ('STOCK2', '20190221', 326,00), ('STOCK2', '20190222', 320,00), ('STOCK2', '20190225', 317,00), ('STOCK2',026, 03.02 'STOCK2', '20190227', 325,00), ('STOCK2', '20190228', 322,00), ('STOCK2', '20190301', 324,00), ('STOCK2', 02 '0201',02 ', '20190305', 319,00), ('STOCK2', '20190306', 322,00), ('STOCK2', '20190307', 326,00), ('STOCK2', '20190306,08'','20190306.08 '20190311', 324,00); SELECT symbol, datum obchodu, cena FROM dbo.Ticker;

Tento kód generuje následující výstup:

cena symbolu obchodu------ ---------- ------ STOCK1 2019-02-12 150,00STOCK1 2019-02-13 151,00STOCK1 2019-02-14 148,00STOCK 2019-02-15 146.00stock1 2019-02-18 142.00Stock1 2019-02-19 144.00stock1 2019-02-20 152.00stock1 2019-02-21 152.00stock1 2019-02-22 153,00stock1 2019-02-25 154.00Stock1 2019 -02-26 154,00stock1 2019-02-27 154.00stock1 2019-02-28 153.00stock1 2019-03-01 145.00stock1 2019-03-04 140.00Stock1 2019-03-05 142.00stock1 2019-03-06 143.00stock1 2019- 03-07 142.00stock1 2019-03-08 140,00stock1 2019-03-11 138.00stock2 2019-02-12 330.00stock2 2019-02-13 329.00Stock2 2019-02-14 329.00Stock2 2019-02-15 326.00Stock2 2019-02 -18 325,00stock2 2019-02-19 326.00stock2 2019-02-20 328.00stock2 2019-02-21 326.00stock2 2019-02-22 320,00Stock2 2019-02-25 317.00Stock2 2019-02-26 319.00Stock2 2019-02- 27 325,00STOCK2 2019-02-28 322,00STOCK2 2019-03-01 324,00STOCK2 2019-03-04 321,00STOCK2 2019-03-05 319. 2019-03-06 322,00STOCK2 2019-03-07 326,00STOCK2 2019-03-08 326,00STOCK2 2019-03-11 324,0040 dotčených řádků.

Následující dotaz identifikuje vzory představující tvary V v ceně akcií (období s přísně klesající cenou, po kterém následuje období s přísně rostoucí cenou), přičemž jako řádky vzoru řádků na shodu používá JEDEN ŘÁDEK ZA SHODU. možnost:

PREV(C.price) ) AS MR;

Klauzule PARTITION BY definuje, že chcete zacházet s každým symbolem akcií samostatně.

Klauzule ORDER BY definuje objednávání na základě data obchodu.

Klauzule DEFINE definuje proměnné vzoru řádků představující různé podsekvence řádků ve vzoru. Ve výše uvedeném příkladu A představuje libovolný řádek jako výchozí bod, B představuje dílčí posloupnost klesajících cen (B.cena PREV( C. cena)).

Klauzule PATTERN používá k identifikaci vzoru regulární výrazy. Ve výše uvedeném dotazu je vzor (A B+ C+), což znamená (libovolný řádek, za nímž následuje jeden nebo více řádků s klesajícími cenami, následovaný jedním nebo více řádky s rostoucími cenami). Níže jsou uvedeny kvantifikátory vzorů regulárních výrazů, které můžete použít:

* — nula (0) nebo více shod+ — jedna (1) nebo více shod? — žádná shoda nebo jedna (1) shoda, volitelné{ n } — přesně n shod{ n, } — n nebo více shod{ n, m } — mezi n a m (včetně) shod{ , m } — mezi nulou (0 ) am (včetně) odpovídá {- Proměnná -}, např. {- A -} – označuje, že odpovídající řádky mají být vyloučeny z výstupu (užitečné pouze v případě, že jsou zadány VŠECHNY ŘÁDKY NA SHODU)|, např. A | B – alternation(), např. (A | B) – seskupení^, např. ^A{1, 3} – začátek oddílu vzoru řádku$, např. A{1, 3}$ – konec vzoru řádku oddíl 

Ve výchozím nastavení jsou kvantifikátory chamtivé, ale můžete je definovat jako neochotné.

Klauzule SUBSET vám umožňuje definovat pojmenovanou podmnožinu seznamu proměnných.

Klauzule MEASURES definuje míry související se vzorem. Výpočty můžete použít na proměnné vzoru a na podmnožiny. Funkce MATCH_NUMBER() přiřazuje shodám v oddílu sekvenční celá čísla začínající 1. Můžete použít operace jako FIRST, LAST, PREV a NEXT, stejně jako agregované výpočty.

Tento dotaz používá JEDEN ŘÁDEK NA SHODU jako možnost vzoru řádků na shodu. To znamená, že výsledková tabulka bude mít jeden řádek na shodu vzoru, podobně jako výsledek seskupování. Alternativou je VŠECHNY ŘÁDKY NA SHODU, kde chcete, aby se řádky podrobností vrátily podle vzoru (příklad bude brzy následovat).

Tento dotaz používá AFTER MATCH SKIP PAST LAST ROW jako AFTER MATCH . To znamená, že jakmile je nalezena shoda, chcete, aby další pokus začal po posledním řádku aktuální shody. Existují další alternativy, jako je hledání další shody v řadě po prvním řádku aktuální shody (SKIP TO NEXT ROW) nebo přeskočení na pozici vzhledem k proměnné vzoru řádku.

Zde je očekávaný výstup tohoto dotazu:

symbol matchnum počáteční datum počáteční cena bottomdat nejnižší cena koncová cena koncová cena maxprice------ -------- ---------- --------- ---- ------ ----------- ---------- -------- --------STOCK1 1 2019-02-13 151.00 2019-02-18 142.00 2019-02-20 152.00 152.00Stock1 2 2019-02-27 154,00 2019-03-04 140,00 2019-03-06 143.00 154.00Stock2 1 2019-02-14 329.00 2019-02-18 325.00 2019 -02-20 328,00 329,00stock2 2 2019-02-21 326,00 2019-02-25 317,00 2019-02-27 325,00 326.00stock2 3 2019-03-01 324,00 2019 před> 

Zde je mírně upravená verze dotazu využívající možnost VŠECHNY ŘÁDKY NA SHODU:

SELECT MR.symbol, MR.tradedate, MR.price, MR.matchnum, MR.classy, ​​MR.počáteční datum, MR.počáteční cena, MR.dolní datum, MR.dolní cena, MR.koncová cena, MR.koncová cena, MR. maxpriceFROM dbo.Ticker MATCH_RECOGNIZE ( ROZDĚLENÍ PODLE symbolu ORDER BY tradedate MEASURES MATCH_NUMBER() AS matchnum, CLASSIFIER() AS classy, ​​A.tradedate AS počáteční datum, A.price AS počáteční cena, LAST(B.tradedate) AS bottomdate, LAST(B. cena) JAKO spodní cena, POSLEDNÍ (C.obchodní datum) JAKO koncové datum, POSLEDNÍ (C.cena) JAKO koncová cena, MAX(U.cena) JAKO max.cena VŠECHNY ŘÁDKY NA ZÁPAS PO ZÁPADĚ PŘESKOČIT POSLEDNÍ VZOR ŘÁDKU (A B+ C+) PODSOUBOR U =(A, B, C) DEFINUJTE B AS B.cena  PREV(C.price) ) AS MR;

Zde je očekávaný výstup tohoto dotazu:

symbol datum obchodu cena shodné číslo prima počáteční datum počáteční cena datum dna nejnižší cena koncová cena maxprice------ ---------- ------ -------- ----- ---------- ---------- ---------- ----------- -------- -- --------- --------STOCK1 2019-02-13 151,00 1 A 2019-02-13 151,00 NULL NULL NULL 151,00STOCK1 2019-02-14 14 B0198 02-13 151,00 2019-02-14 148,00 NULL NULL 151.00Stock1 2019-02-15 146,00 1 B 2019-02-13 151,00 2019-02-15 146,00 NULL NULL 151.00Stock1 2019-02-18 142.00 1 B 2019-02- 13 151,00 2019-02-18 142.00 NULL NULL 151.00Stock1 2019-02-19 144,00 1 C 2019-02-13 151.00 2019-02-18 142.00 2019-02-19 144.00 151.00stock1 2019-02-20 152.00 1 C 2019- 02-13 151,00 2019-02-18 142,00 2019-02-20 152,00 152,00 STOCK1 2019-02 -27 154,00 2 A 2019-02-27 154,00 NULL NULL NULL NULL NULL 154.00Stock1 2019-02-28 153,00 2 B 2019-02-27 154,00 2019-02-28 153,00 NULL NULL NULL 154,00Stock1 2019-01 145,00 2 B 2019 -02-27 154,00 2019-03-01 145,00 NULL NULL 154,00Stock1 2019-03-04 140,00 2 B 2019-02-27 154,00 2019-03-04 140,00 NULL NULL 154,00Stock1 2019-03-05 142.00 2 C 2019-02 -27 154,00 2019-03-04 140,00 2019-03-05 142.00 154,00stock1 2019-03-06 143,00 2 C 2019-02-27 154,00 2019-03-04 140,00 2019-03-06 143.00 154,00stock2 2019-02-14 2019,00 1 A 2019-02-14 329,00 NULL NULL NULL NULL 329,00STOCK2 2019-02-15 326,00 1 B 2019-02-14 2019-02-14 2019-02-14 329,00 2019-03-02 2019-03 2019-02-14 329,00 2019-02-18 325.00 NULL NULL 329.00Stock2 2019-02-19 326,00 1 C 2019-02-14 329.00 2019-02-18 325.00 2019-02-19 326.00 329.00219-02-2020.00 1 C 2019-02-14 329,00 2019-02-18 325,00 2019-02-20 328,00 329,00stock2 2019-02-21 326,00 2 A 2019-02-21 326.00 Null Null Null Null NULL 326.00Stock2 2019-02-22 320,00 2 B 2019-02-21 326,00 2019-02-22 320,00 NULL NULL 326.00Stock2 2019-02-25 317,00 2 B 2019-02-21 326.00 2019-02-25 317,00 NULL NULL 326.00Stock2 2019-02-26 319,00 2 C 2019- 02-21 326,00 2019-02-25 317,00 2019-02-26 319.00 326,00stock2 2019-02-27 325.00 2 C 2019-02-21 326,00 2019-02-25 317,00 2019-02-27 325.00 326.00STOCK2 2019-03- 01 324,00 3 A 2019-03-01 324,0 0 NULL NULL NULL NULL 324.00Stock2 2019-03-04 321.00 3 B 2019-03-01 324,00 2019-03-04 321.00 NULL 324.00Stock2 2019-03-05 319.00 3 B 2019-03-01 324.00 2019-05 319.00 NULL NULL 324,00stock2 2019-03-06 322,00 3 C 2019-03-01 324,00 2019-03-05 319,00 2019-03-06 322,00 324,00stock2 2019-03-07 326.00 3 C 2019-03-03 2019-03 2019-03 2019-03 2019-03 -05 319,00 2019-03-07 326,00 326,0027 dotčených řádků.

Všimněte si přidání klasicky míry založené na funkci CLASSIFIER. Tato funkce vrací řetězec představující proměnnou vzoru řádku, ke které je výsledný řádek přidružen (v našem případě A, B nebo C).

Funkce R020, „Rozpoznávání vzorů řádků:klauzule WINDOW“

Funkce R020 používá rozpoznávání vzoru řádků jako součást klauzule OVER při vytváření okna (nebo klauzule WINDOW při pojmenování specifikace okna) k dalšímu omezení rámu okna. Stejně jako okenní oddíl omezuje řádky výrazu vstupní tabulky (FROM... WHERE... GROUP BY... HAVING) a okenní rám dále omezuje okenní oddíl, pomocí funkce R020 dále omezujete celý okenní rám na zmenšený okenní rám vyrobený podsekvence řádků tvořících shodu vzoru. Zde je dotaz demonstrující tuto funkci s klauzulí WINDOW, používající podobnou specifikaci shody vzoru řádků jako v prvním dotazu v tomto článku:

VYBERTE T.symbol, T.obchodní datum, T.cena, počáteční datum OVER W, počáteční cena OVER W, spodní datum OVER W, nejnižší cena OVER W, koncové datum OVER W, konečná cena OVER W, max.cena OVER WFROM dbo.Ticker TWINDOW W AS ( ROZDĚLENÍ PODLE symbolu POŘADÍ PODLE data obchodu OPATŘENÍ A.obchodní datum JAKO počáteční datum, A.cena JAKO počáteční cena, LAST(B.datum obchodu) JAKO datum dna, LAST(B.cena) JAKO spodní cena, LAST(C.obchodní datum) JAKO datum ukončení, LAST(C. cena) JAKO koncová cena, MAX(JMc) JAKO maxprice ŘÁDKY MEZI SOUČASNÝM ŘÁDKEM A NEZAPOMENUTÉ NÁSLEDUJÍCÍ PO ZÁPADĚ PŘESKOČIT POSLEDNÍ POSLEDNÍ ŘÁDEK ZAČÁTEK -- vzor musí začínat v první řadě celého rámu okna; alternativou je PODSADA HLEDAT VZOR (A B+ C+) U =(A, B, C) DEFINUJTE B JAKO B.cena  PREV(C.price) );

Při použití rozpoznávání vzoru řádků s okénkem musí celý rám okna začínat na aktuálním řádku. Všimněte si použití možnosti INITIAL v tomto dotazu. Tato možnost znamená, že získáte shodu pouze v případě, že vzor začíná aktuálním řádkem. Alternativou je SEEK, což znamená, že hledání shody začíná aktuálním řádkem, ale je povoleno až do konce celého okna. V každém případě, pokud je nalezena shoda, zmenšený rám okna sestává pouze z řádků shody vzoru, jinak je zmenšený rám okna prázdný. Hledá se pouze jedna shoda vzoru řady na celý okenní rám.

Všimněte si v seznamu SELECT dotazu, že můžete vrátit míry definované v klauzuli MEASURES, vypočítané přes W, což je zmenšený rámec okna.

Připomeňte si výsledek prvního dotazu v tomto článku pomocí rozpoznávání vzorů řádků v klauzuli FROM s možností JEDEN ŘÁDEK NA SHODU:

symbol matchnum počáteční datum počáteční cena bottomdat nejnižší cena koncová cena koncová cena maxprice------ -------- ---------- --------- ---- ------ ----------- ---------- -------- --------STOCK1 1 2019-02-13 151.00 2019-02-18 142.00 2019-02-20 152.00 152.00Stock1 2 2019-02-27 154,00 2019-03-04 140,00 2019-03-06 143.00 154.00Stock2 1 2019-02-14 329.00 2019-02-18 325.00 2019 -02-20 328,00 329,00stock2 2 2019-02-21 326,00 2019-02-25 317,00 2019-02-27 325,00 326.00stock2 3 2019-03-01 324,00 2019 před> 

Zde je očekávaný výstup našeho posledního dotazu pomocí rozpoznávání vzorů řádků v klauzuli WINDOW:

symbol datum obchodu cena počáteční datum počáteční cena datum dna nejnižší cena koncová cena konečná cena maxprice------ ---------- ------ ---------- ----- ----- ---------- ----------- ---------- -------- ------ -Stock1 2019-02-12 150,00 NULL NULL NULL NULL NULL NULLSTOCK1 2019-02-13 151.00 2019-02-13 151,00 2019-02-18 142,00 2019-02-20 152,00 152,00S119-02-14 148.00 NULL NULL NULL NULL NULL NULL NULL NULL NULL Null Null Null Null Nullstock1 2019-02-15 146,00 Null Null Null Null Nullstock1 2019-02-18 142.00 NULL NULL NULL NULLSTOCK1 2019-02-19 144.00 Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null. NULL NULL NULL NULL NULL NULL NULLTOCK1 2019-02-21 152,00 NULL NULL NULL NULL N Ull null nullstock1 2019-02-22 153,00 Null Null Null Null Nullstock1 2019-02-25 154.00 Null Null Null Nullstock1 2019-02-26 154,00 Null Null Nullstock1 2019-27 154,00 2019-2019-2019-2019-2019-2019-2019-2019-2019-2019-2019-2019-2019-2019-2019-2019-2019-2019-2019-2019-2019-2019-2019-2019-2019-2019-2019-2019-2019-2019-2019-2019-2019-2019-2019-2019-2019-2019-2019-0 02-27 154,00 2019-03-04 140,00 2019-03-06 143.00 154,00stock1 2019-02-28 153.00 Null Null Null Null Nullstock1 2019-03-01 145.00 Null Null Nullstock1 2019-04 140,00 NULL NULL NULL NULL NULL NULLTOCK1 2019-03-05 142,00 NULL NULL NULL NULL NULL NULLTOCK1 2019-03-06 143,00 02.00 NULL NULL NULL 02.00 NULL9 NULL NULL 017 NULL NULL 017 NULL NULL 017. Ull null null nullstock1 2019-03-08 140,00 Null Null Null Null Nullstock1 2019-03-11 138,00 Null Null Null Nullstock2 2019-02-13 329.00 Null Null NULLSTOCK2. NULL NULL NULL NULL NULL NULLSTOCK2 2019-02-14 329.00 2019-02-14 329.00 2019-02-18 325.00 2019-02-20 328.00 329.00STOCK2 2019-02-15 326.00 NULL NULL NULL NULL NULL NULL NULLSTOCK2 2019-02-18 325.00 NULL NULL NULL NULL NULL NULLSTOCK2 2019-02-19 326,00 NULL NULL NULL NULL NULLSTOCK2 2019-02-20 328,00 NULL NULL NULL NULLSTstock2 2019-02-21 326.00 2019-02-21 326,00 019-02-25 317,00 2019-02-27 325,00 326,00stock2 2019-02-22 320,00 NULL NULL NULL NULLSTOCK2 2019-02-25 317.00 NULL NULL NULLTUll NULLSTOCK2 NULL NULL NULLSTOCK2 2019-02-27 325,00 NULL NULL NULL NULL NULLSTOCK2 2019-02-28 322.00 NULL NULL NULL NULLSTOCK2 2019-03-01 324.00 2019-03-01 324.00 2019-03-03 -07 326.00 326.00STOCK2 2019-03-04 321.00 NULL NULL NULL NULL NULL NULL NULLSTOCK2 2019-03-05 319.00 NULL NULL NULL NULL NULL NULL NULLSTOCK2 2019-03-06 322.00 NULL NULL NULL NULL NULL NULL NULLSTOCK2 2019-03-07 326.00 NULA NULL NULL NULL NULL NULL NULLTOCK2 2019-03-08 326,00 NULL NULL NULL NULL NULL NULLSOCK2 2019-03-11 324,00 NULL řádek NULL NULL NULL> NULL NULL ovlivněno. 

Všimněte si, že ve výstupu získáte všechny podrobné řádky a tam, kde začne shoda vzoru, získáte výsledek měření požadovaného vzoru řádků vůči zmenšenému rámu okna.

Hlasujte

Je zcela pochopitelné, že pro Microsoft je přidání funkce do T-SQL – zvláště takové podstatné – poměrně významnou investicí. Ale co je skvělé na funkcích, které jsou přidány do T-SQL, je to, že tam v podstatě zůstávají navždy. Existuje obrovská komunita hladová po vylepšeních T-SQL, jako je toto.

Pokud máte pocit, že rozpoznávání vzorů řádků je důležitým doplňkem SQL Serveru, nezapomeňte hlasovat. Společnost Microsoft také pravděpodobně upřednostní navrhovanou funkci, pokud znají zákazníky a případy použití, které by z ní mohly mít prospěch, a že v tuto chvíli takoví zákazníci buď používají jiné produkty nebo složitější řešení. Pokud vy nebo vaši zákazníci považujete RPR za prospěšné pro vás a máte případy použití, které můžete sdílet, nezapomeňte přidat komentáře k položce zpětné vazby a dejte vědět společnosti Microsoft.


  1. SUBDATE() vs DATE_SUB() v MySQL:Jaký je rozdíl?

  2. Parametrizovaný dotaz ..... očekává parametr '@units', který nebyl zadán

  3. Jak používat SqlTransaction v C#

  4. Automatizované testování procesu upgradu pro PostgreSQL