Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

Pengenalan Pola Baris dalam SQL

Standar ISO/IEC 9075:2016, atau singkatnya SQL:2016, memperkenalkan dukungan untuk konsep mendalam yang disebut Pengenalan Pola Baris (RPR) dalam SQL. Saya memposting saran untuk meningkatkan SQL Server dengan menambahkan dukungan untuk RPR di T-SQL, tetapi saya cukup terbatas dalam ruang yang harus saya berikan untuk memberikan umpan balik. Tujuan artikel ini adalah untuk memberikan detail lebih lanjut tentang proposal tersebut, dan semoga Anda yakin akan pentingnya proposal tersebut dan menambahkan suara Anda.

Latar Belakang

Mirip dengan menggunakan ekspresi reguler untuk mengidentifikasi pola dalam string, dengan RPR Anda menggunakan ekspresi reguler untuk mengidentifikasi pola dalam urutan baris. Untuk setiap kecocokan pola, Anda dapat mengembalikan baris ringkasan seperti dalam pengelompokan, atau baris mendetail, dengan pengukuran yang dihitung terhadap suburutan kecocokan. RPR memiliki aplikasi praktis tanpa batas, termasuk mengidentifikasi pola dalam aktivitas pasar saham (baik pola yang valid dengan nilai perdagangan, dan pola yang berpotensi ilegal atau mencurigakan), menangani deret waktu, deteksi penipuan, penanganan material, aplikasi pengiriman, pengurutan DNA, celah dan pulau, atas N per grup, dan banyak lainnya.

Bagi saya, RPR adalah langkah selanjutnya dalam evolusi fungsi jendela, dengan tingkat kecanggihan yang lebih tinggi, dan utilitas yang diperluas. Jika menurut Anda fungsi jendela sangat penting dan berguna, RPR benar-benar akan memanggang mie Anda. Mirip dengan fungsi jendela, RPR mendukung partisi dan pemesanan. Anda biasanya akan mencari kecocokan pola dalam setiap partisi secara independen, berdasarkan urutan yang ditunjukkan. Juga mirip dengan fungsi jendela, RPR cocok untuk pengoptimalan yang baik, dengan kemampuan mengandalkan pengurutan indeks untuk menghindari pengurutan data.

Anda dapat menemukan cakupan RPR, termasuk contoh ilustrasi, dalam laporan teknis 90 halaman ISO/IEC TR 19075-5 (tersedia gratis).

Anda juga dapat menemukannya sebagai bagian dari dokumen ISO/IEC 9075-2:2016, Teknologi informasi — Bahasa database — SQL — Bagian 2:Foundation (SQL/Foundation) (tersedia untuk dibeli).

Standar SQL:2016 menyediakan dua fitur utama terkait RPR:

  • Fitur R010, “Pengenalan pola baris:klausa FROM”
  • Fitur R020, “Pengenalan pola baris:klausa WINDOW”

Standar ini juga menyebutkan fitur R030, “Pengenalan pola baris:dukungan agregat penuh”, yang tanpanya fungsi agregat tidak diizinkan untuk menentukan DISTINCT atau .

Sejauh ini, satu-satunya platform yang saya tahu tentang fitur yang diimplementasikan R010 adalah Oracle. Saya belum tahu platform apa pun yang mengimplementasikan R020.

Fitur R010, “Pengenalan pola baris:klausa FROM”

Fitur R010 mendefinisikan operator klausa/tabel yang disebut MATCH_RECOGNIZE, yang Anda gunakan dalam klausa FROM. Inputnya adalah tabel atau ekspresi tabel, dan outputnya adalah tabel virtual. Konteksnya mirip dengan operator tabel lain seperti JOIN, APPLY, PIVOT dan UNPIVOT. Berikut sintaks kueri yang menggunakan fitur ini:

PILIH  FROM  MATCH_RECOGNIZE ( [ PARTITION BY  ] [ ORDER BY  ] [ TINDAKAN  ] [  ::=SATU BARIS PER PERTANDINGAN | SEMUA BARIS PER PERTANDINGAN ] [ SETELAH PERTANDINGAN  POLA (  ) [ SUBSET  ] DEFINE  ) SEBAGAI ;

Sebagai contoh yang diadaptasi dari laporan teknis di atas, misalkan Anda diberikan tabel dbo.Ticker, dengan simbol kolom, tanggal perdagangan, dan harga. Gunakan kode berikut untuk membuat tabel, mengisinya dengan beberapa contoh data, dan menanyakannya:

ATUR NOCOUNT AKTIF; GUNAKAN tempdb; DROP TABLE JIKA ADA dbo.Ticker; CREATE TABLE dbo.Ticker( simbol VARCHAR(10) NOT NULL, tradedate DATE NOT NULL, price NUMERIC(12, 2) NOT NULL, CONSTRAINT PK_Ticker PRIMARY KEY (simbol, tradedate));GO INSERT INTO dbo.Ticker(simbol, tradedate , harga) NILAI ('STOCK1', '20190212', 150,00), ('STOCK1', '20190213', 151,00), ('STOCK1', '20190214', 148.00), ('STOCK1', '20190215', 146.00 ), ('STOCK1', '20190218', 142.00), ('STOCK1', '20190219', 144.00), ('STOCK1', '20190220', 152.00), ('STOCK1', '20190221', 152.00), ('STOCK1', '20190222', 153.00), ('STOCK1', '20190225', 154.00), ('STOCK1', '20190226', 154.00), ('STOCK1', '20190227', 154.00), (' STOCK1', '20190228', 153.00), ('STOCK1', '20190301', 145.00), ('STOCK1', '20190304', 140.00), ('STOCK1', '20190305', 142.00), ('STOCK1' , '20190306', 143.00), ('STOCK1', '20190307', 142.00), ('STOCK1', '20190308', 140.00), ('STOCK1', '20190311', 138.00), ('STOCK2', ' 20190212', 330.00), ('STOCK2', '20190213', 329.00), ('STOCK2', '20190214', 329.00), ('STOCK2', '20190215', 326.00), ('STOCK2', '20190218', 325.00), ('STOCK2', '20190219', 326.00), ('STOCK2', '20190220', 328.00) , ('STOCK2', '20190221', 326.00), ('STOCK2', '20190222', 320.00), ('STOCK2', '20190225', 317.00), ('STOCK2', '20190226', 319.00), ( 'STOCK2', '20190227', 325.00), ('STOCK2', '20190228', 322.00), ('STOCK2', '20190301', 324.00), ('STOCK2', '20190304', 321.00), ('STOCK2 ', '20190305', 319.00), ('STOCK2', '20190306', 322.00), ('STOCK2', '20190307', 326.00), ('STOCK2', '20190308', 326.00), ('STOCK2', '20190311', 324.00); PILIH simbol, tanggal perdagangan, harga DARI dbo.Ticker;

Kode ini menghasilkan output berikut:

harga simbol tradedate------ ---------- ------ STOCK1 2019-02-12 150.00STOCK1 2019-02-13 151.00STOCK1 2019-02-14 148.00STOCK1 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 -26-02 154.00STOCK1 27-02-2019 154.00STOCK1 28-02-2019 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.00STOCK2 2019-03-06 322.00STOCK2 2019-03-07 326.00STOCK2 2019-03-08 326.00STOCK2 2019-03-11 324.0040 baris terpengaruh.

Kueri berikut mengidentifikasi pola yang mewakili bentuk V dalam harga saham (periode dengan harga yang sangat turun diikuti oleh periode dengan harga yang sangat meningkat), menggunakan SATU ROW PER MATCH sebagai pola baris baris per pertandingan pilihan:

PILIH MR.symbol, MR.matchnum, MR.startdate, MR.startprice, MR.bottomdate, MR.bottomprice, MR.enddate, MR.endprice, MR.maxpriceFROM dbo.Ticker MATCH_RECOGNIZE ( PARTITION BY simbol ORDER BY tradedate MEASURES MATCH_NUMBER() AS matchnum, A.tradedate AS startdate, A.price AS startprice, LAST(B.tradedate) AS bottomdate, LAST(B.price) AS bottomprice, LAST(C.tradedate) AS enddate, -- sama dengan TERAKHIR(tanggal perdagangan) TERAKHIR(C.price) SEBAGAI endprice, MAX(U.price) SEBAGAI maxprice -- sama dengan MAX(price) SATU ROW PER MATCH -- default AFTER MATCH SKIP MELEWATI LAST ROW -- POLA default (A B+ C+ ) SUBSET U =(A, B, C) DEFINE -- A default ke True, cocok dengan baris mana pun, sama seperti mendefinisikan secara eksplisit A ​​AS 1 =1 B AS B.price  PREV(C.price) ) SEBAGAI MR;

Klausa PARTITION BY mendefinisikan bahwa Anda ingin menangani setiap simbol saham secara terpisah.

Klausa ORDER BY mendefinisikan pemesanan berdasarkan tanggal perdagangan.

Klausa DEFINE mendefinisikan variabel pola baris yang mewakili suburutan baris yang berbeda dalam pola. Dalam contoh di atas, A mewakili setiap baris sebagai titik awal, B mewakili urutan penurunan harga (B.price PREV( C.price)).

Klausa PATTERN menggunakan ekspresi reguler untuk mengidentifikasi pola. Dalam kueri di atas polanya adalah (A B+ C+), artinya (baris mana saja, diikuti oleh satu atau lebih baris dengan penurunan harga, diikuti oleh satu atau lebih baris dengan kenaikan harga). Berikut ini adalah quantifier pola ekspresi reguler yang dapat Anda gunakan:

* — nol (0) atau lebih kecocokan+ — satu (1) atau lebih kecocokan? — tidak ada kecocokan atau satu (1) kecocokan, opsional{ n } — persis n kecocokan{ n, } — n atau lebih kecocokan{ n, m } — antara n dan m (termasuk) kecocokan{ , m } — antara nol (0 ) dan m (inklusif) cocok{- Variabel -}, mis., {- A -} — menunjukkan bahwa baris yang cocok harus dikeluarkan dari output (berguna hanya jika SEMUA ROW PER MATCH ditentukan)|, mis., A | B — alternation(), mis., (A | B) — grouping^, mis., ^A{1, 3} — awal dari pola baris partisi$, mis., A{1, 3}$ — akhir dari pola baris partisi 

Secara default, quantifier adalah serakah, tetapi Anda dapat mendefinisikannya sebagai enggan.

Klausa SUBSET memungkinkan Anda untuk mendefinisikan subset daftar variabel yang diberi nama.

Klausa MEASURES mendefinisikan langkah-langkah yang terkait dengan pola. Anda dapat menerapkan perhitungan ke variabel pola dan himpunan bagian. Fungsi MATCH_NUMBER() menetapkan bilangan bulat berurutan yang dimulai dengan 1 untuk kecocokan dalam partisi. Anda dapat menggunakan operasi seperti FIRST, LAST, PREV, dan NEXT, serta penghitungan agregat.

Kueri ini menggunakan SATU ROW PER MATCH sebagai opsi baris pola baris per kecocokan. Ini berarti tabel hasil akan memiliki satu baris per pencocokan pola, mirip dengan hasil pengelompokan. Alternatifnya adalah SEMUA BARIS PER PERCOBAAN di mana Anda ingin baris detail dikembalikan per kecocokan pola (contoh akan segera menyusul).

Kueri ini menggunakan AFTER MATCH SKIP PAST LAST ROW sebagai AFTER MATCH . Ini berarti bahwa setelah kecocokan ditemukan, Anda ingin percobaan berikutnya dimulai setelah baris terakhir dari kecocokan saat ini. Ada alternatif lain seperti mencari kecocokan berikutnya di baris mengikuti baris pertama dari kecocokan saat ini (LEWATKAN KE ROW BERIKUTNYA), atau melompat ke posisi relatif terhadap variabel pola baris.

Inilah hasil yang diharapkan dari kueri ini:

simbol matchnum startdate startprice bottomdat bottomprice enddate endprice 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-03-05 319.00 2019-03-07 326.00 326.00 

Berikut adalah versi kueri yang sedikit dimodifikasi menggunakan opsi ALL ROWS PER MATCH:

PILIH MR.symbol, MR.tradedate, MR.price, MR.matchnum, MR.classy, ​​MR.startdate, MR.startprice, MR.bottomdate, MR.bottomprice, MR.enddate, MR.endprice, MR. maxpriceFROM dbo.Ticker MATCH_RECOGNIZE ( PARTITION BY simbol ORDER BY tradedate UKURAN MATCH_NUMBER() AS matchnum, CLASSIFIER() AS berkelas, A.tradedate AS startdate, A.price AS startprice, LAST(B.tradedate) AS bottomdate, LAST(B. harga) SEBAGAI harga terendah, TERAKHIR(C.tradedate) SEBAGAI tanggal akhir, TERAKHIR(C.price) SEBAGAI endprice, MAX(U.price) SEBAGAI maxprice SEMUA BARIS PER PERTANDINGAN SETELAH PERTANDINGAN LEWATI POLA BARI TERAKHIR TERAKHIR (A B+ C+) SUBSET U =(A, B, C) DEFINE B AS B.price  PREV(C.price) ) AS MR;

Inilah hasil yang diharapkan dari kueri ini:

simbol tradedate price matchnum classy startdate startprice bottomdate bottomprice endprice endprice maxprice------ ---------- ------ -------- ----- - ---------- ---------- ---------- ----------- -------- --------- --------STOCK1 2019-02-13 151,00 1 A 2019-02-13 151,00 NULL NULL NULL NULL 151,00STOCK1 2019-02-14 148.00 1 B 2019- 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- 13-02 151.00 2019-02-18 142.00 2019-02-20 152.00 152.00STOCK1 2019-02 -27 154.00 2 A 2019-02-27 154.00 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 154.00STOCK1 2019-03-01 145.00 2 B 2019 -27-02 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.00 STOCK1 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 329.00 1 A 2019-02-14 329.00 NULL NULL NULL NULL 329.00STOCK2 2019-02-15 326.00 1 B 2019-02-14 329.00 2019-02-15 326.00 NULL NULL 329.00STOCK2 2019-02-18 325.00 1 B 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.00STOCK2 2019-02-20 328.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 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 NULL 324.00STOCK2 2019-03-05 319.00 3 B 2019-03-01 324.00 2019-03-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-01 324.00 2019-03 -05 319.00 2019-03-07 326.00 326.0027 baris terpengaruh.

Perhatikan penambahan ukuran classy berdasarkan fungsi CLASSIFIER. Fungsi ini mengembalikan string yang mewakili variabel pola baris yang dikaitkan dengan baris hasil (dalam kasus kami, A, B, atau C).

Fitur R020, “Pengenalan pola baris:klausa WINDOW”

Fitur R020 menggunakan pengenalan pola baris sebagai bagian dari klausa OVER windowing (atau klausa WINDOW saat menamai spesifikasi jendela) untuk lebih membatasi bingkai jendela. Sama seperti partisi jendela yang membatasi baris ekspresi tabel input (FROM… WHERE… GROUP BY… HAVING), dan bingkai jendela lebih lanjut membatasi partisi jendela, dengan fitur R020 Anda selanjutnya membatasi bingkai jendela penuh menjadi bingkai jendela yang dikurangi. dari urutan baris yang merupakan kecocokan pola. Berikut adalah kueri yang menunjukkan fitur ini dengan klausa WINDOW, menggunakan spesifikasi pencocokan pola baris yang serupa dengan yang digunakan dalam kueri pertama dalam artikel ini:

SELECT T.symbol, T.tradedate, T.price, startdate OVER W, startprice OVER W, bottomdate OVER W, bottomprice OVER W, enddate OVER W, endprice OVER W, maxprice OVER WFROM dbo.Ticker TWINDOW W AS ( PARTISI MENURUT simbol ORDER BY tradedate UKURAN A.tradedate AS startdate, A.price AS startprice, LAST(B.tradedate) AS bottomdate, LAST(B.price) AS bottomprice, LAST(C.tradedate) AS enddate, LAST(C. price) SEBAGAI endprice, MAX(U.price) AS maxprice BARIS ANTARA BARIS LANCAR DAN UNBOUNDED FOLLOWING SETELAH MATCH LEWATI LEWAT LAST ROW INITIAL -- pola harus dimulai dari baris pertama bingkai jendela penuh; alternatifnya adalah SEEK PATTERN (A B+ C+) SUBSET U =(A, B, C) DEFINE B AS B.price  PREV(C.price) );

Saat menggunakan pengenalan pola baris dengan windowing, bingkai jendela penuh harus dimulai dari baris saat ini. Perhatikan penggunaan opsi AWAL dalam kueri ini. Opsi ini berarti Anda mendapatkan kecocokan hanya jika polanya dimulai dengan baris saat ini. Alternatifnya adalah SEEK, artinya pencarian kecocokan dimulai dengan baris saat ini, tetapi diizinkan hingga akhir bingkai jendela penuh. Either way, jika kecocokan ditemukan, bingkai jendela yang dikurangi hanya terdiri dari baris kecocokan pola, jika tidak, bingkai jendela yang dikurangi kosong. Hanya satu pola baris yang cocok per bingkai jendela penuh yang dicari.

Amati dalam daftar SELECT kueri bahwa Anda dapat mengembalikan ukuran yang ditentukan dalam klausa MEASURES, dihitung melalui W, yang merupakan bingkai jendela yang diperkecil.

Ingat kembali hasil kueri pertama dalam artikel ini, menggunakan pengenalan pola baris dalam klausa FROM, dengan opsi SATU ROW PER MATCH:

simbol matchnum startdate startprice bottomdat bottomprice enddate endprice 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-03-05 319.00 2019-03-07 326.00 326.00 

Inilah hasil yang diharapkan dari kueri terakhir kami, menggunakan pengenalan pola baris dalam klausa WINDOW:

simbol tanggal perdagangan harga mulaitanggal mulaiharga terbawah harga terbawah tanggal akhir harga akhir maxprice------ ---------- ------ ---------- ----- ----- ---------- ----------- ---------- -------- ------ --STOCK1 2019-02-12 150.00 NULL 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.00STOCK1 2019-02-14 148.00 NULL NULL NULL NULL NULL NULL NULLSTOCK1 2019-02-15 146.00 NULL NULL NULL NULL NULL NULL NULLSTOCK1 2019-02-18 142.00 NULL NULL NULL NULL NULL NULL NULL NULLSTOCK1 2019-02-19 144.00 NULL NULL 152.00 NULL 2019 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULLSTOCK1 2019-02-21 152.00 NULL NULL NULL NULL N ULL NULL NULLSTOCK1 2019-02-22 153.00 NULL NULL NULL NULL NULL NULL NULLSTOCK1 2019-02-25 154.00 NULL NULL NULL NULL NULL NULL NULLSTOCK1 2019-02-26 154.00 NULL NULL NULL NULL NULL 2019 NULL NULL 27-02 154.00 2019-03-04 140.00 2019-03-06 143.00 154.00STOCK1 2019-02-28 153.00 NULL NULL NULL NULL NULL NULLSTOCK1 2019-03-01 145.00 NULL NULL NULL NULL NULL NULL NULLSTOCK1 2019-03-04 140.00 NULL NULL NULL NULL NULL NULL NULLSTOCK1 2019-03-05 142.00 NULL NULL NULL NULL NULL NULLSTOCK1 2019-03-06 143.00 NULL NULL NULL NULL NULL NULL NULLSTOCK1 2019-03-07 142.00 NULL N NULL NULL NULL NULLSTOCK1 2019-03-08 140.00 NULL NULL NULL NULL NULL NULL NULLSTOCK1 2019-03-11 138.00 NULL NULL NULL NULL NULL NULL NULLSTOCK2 2019-02-12 330.00 NULL NULL NULL NULL NULL NULL 9.00 2019-NULL NULL 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 NULL NULLSTOCK2 2019-02-19 326.00 NULL NULL NULL NULL NULL NULLSTOCK2 2019-02-20 328.00 NULL NULL NULL NULL NULL NULL NULLSTOCK2 2019-02-21 326.00 22.00 2019-02-21 019-02-25 317.00 2019-02-27 325.00 326.00STOCK2 2019-02-22 320.00 NULL NULL NULL NULL NULL NULL NULLSTOCK2 2019-02-25 317.00 NULL NULL NULL NULL NULL NULL NULL NULLSTOCK2 2019-02-26 319.00 NULL NULL NULL NULL NULLSTOCK2 2019-02-27 325.00 NULL NULL NULL NULL NULL NULL NULLSTOCK2 2019-02-28 322.00 NULL NULL NULL NULL NULL NULL NULLSTOCK2 2019-03-01 324.00 2019-03-01 324.00 2019-03-05 319.00 2019-03-05 -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 NULL 2019 NULL NULL NULL NULL NULL NULL NULLSTOCK2 2019-03-08 326.00 NULL NULL NULL NULL NULL NULL NULLSTOCK2 2019-03-11 324.00 NULL NULL NULL NULL NULL NULL NULL40 baris terpengaruh.

Amati bahwa Anda mendapatkan semua baris detail dalam output, dan di mana kecocokan pola dimulai, Anda mendapatkan hasil dari ukuran pola baris yang diminta terhadap bingkai jendela yang diperkecil.

Berikan suara Anda

Sangat dipahami bahwa bagi Microsoft untuk menambahkan fitur ke T-SQL—terutama yang substansial—adalah investasi yang cukup signifikan. Tapi apa yang hebat tentang fitur yang ditambahkan ke T-SQL adalah bahwa mereka cukup banyak tinggal di sana selamanya. Ada komunitas besar yang haus akan peningkatan T-SQL seperti ini.

Jika Anda merasa bahwa pengenalan pola baris merupakan tambahan penting untuk SQL Server, pastikan Anda memberikan suara Anda. Selain itu, Microsoft lebih cenderung memprioritaskan fitur yang diusulkan jika mereka mengetahui pelanggan dan kasus penggunaan yang dapat mengambil manfaat darinya, dan saat ini pelanggan tersebut menggunakan produk lain atau solusi yang lebih kompleks. Jika Anda atau pelanggan Anda melihat RPR bermanfaat bagi Anda, dan memiliki kasus penggunaan yang dapat Anda bagikan, pastikan Anda menambahkan komentar ke item umpan balik dan beri tahu Microsoft.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menyederhanakan Pengujian Unit Prosedur Tersimpan Utama Yang Juga Memanggil Prosedur Utilitas

  2. Pola Data Referensi:Dapat Diperluas dan Fleksibel

  3. Bisakah komentar menghambat kinerja prosedur tersimpan?

  4. Bagaimana cara menggunakan COUNT dalam SQL?

  5. Jumlah Baris yang Dibaca / Baris Sebenarnya Baca peringatan di Plan Explorer