Sintaks Filter SQL Aturan Langganan
Filter SQL adalah salah satu tipe filter yang tersedia untuk langganan topik Bus Layanan. Ini adalah ekspresi teks yang berbasis pada subset dari standar SQL-92. Ekspresi filter digunakan dengan elemen sqlExpression
properti 'sqlFilter' dari Bus Layanan Rule
dalam templat Azure Resource Manager, atau argumen az servicebus topic subscription rule create
perintah Azure CLI --filter-sql-expression
, dan beberapa fungsi SDK yang memungkinkan pengelolaan aturan langganan. Ekspresi yang diizinkan ditampilkan di bagian ini.
Bus Layanan Premium juga mendukung sintaks pemilih pesan JMS SQL melalui API JMS 2.0.
<predicate ::=
{ NOT <predicate> }
| <predicate> AND <predicate>
| <predicate> OR <predicate>
| <expression> { = | <> | != | > | >= | < | <= } <expression>
| <property> IS [NOT] NULL
| <expression> [NOT] IN ( <expression> [, ...n] )
| <expression> [NOT] LIKE <pattern> [ESCAPE <escape_char>]
| EXISTS ( <property> )
| ( <predicate> )
<expression> ::=
<constant>
| <function>
| <property>
| <expression> { + | - | * | / | % } <expression>
| { + | - } <expression>
| ( <expression> )
<property> :=
[<scope> .] <property_name>
Argumen
<scope>
adalah string opsional yang menunjukkan ruang lingkup<property_name>
. Nilai yang valid adalahsys
atauuser
.- Nilai
sys
menunjukkan cakupan sistem yang di dalamnya<property_name>
merupakan salah satu properti pada pesan Microsoft Azure Service Bus seperti yang dijelaskan dalam Pesan, payload, dan serialisasi. - Nilai
user
menunjukkan cakupan pengguna di mana<property_name>
adalah kunci dari properti kustom yang dapat Anda atur pada pesan saat mengirim ke Bus Layanan. - Cakupan
user
adalah cakupan default apabila<scope>
tidak ditentukan.
- Nilai
Keterangan
Upaya untuk mengakses properti sistem yang tidak ada adalah kesalahan, sementara upaya untuk mengakses properti pengguna yang tidak ada bukanlah kesalahan. Sebagai gantinya, properti pengguna yang tidak ada dievaluasi secara internal sebagai nilai yang tidak diketahui. Nilai yang tidak diketahui diperlakukan secara khusus selama evaluasi operator.
property_name
<property_name> ::=
<identifier>
| <delimited_identifier>
<identifier> ::=
<regular_identifier> | <quoted_identifier> | <delimited_identifier>
Argumen
<regular_identifier>
adalah string yang diwakili oleh ekspresi reguler berikut:
[[:IsLetter:]][_[:IsLetter:][:IsDigit:]]*
Tata bahasa ini berarti setiap string yang dimulai dengan huruf dan diikuti oleh satu atau beberapa garis bawah/huruf/digit.
[:IsLetter:]
berarti setiap karakter Unicode yang dikategorikan sebagai huruf Unicode. System.Char.IsLetter(c)
mengembalikan true
jika c
adalah huruf Unicode.
[:IsDigit:]
berarti setiap karakter Unicode yang dikategorikan sebagai digit desimal. System.Char.IsDigit(c)
mengembalikan true
jika c
adalah digit Unicode.
<regular_identifier>
tidak dapat menjadi kata kunci yang dicadangkan.
<delimited_identifier>
adalah string apa pun yang diapit oleh tanda kurung siku kiri/kanan ([]). Tanda kurung siku diwakili sebagai dua tanda kurung siku. Berikut ini adalah contoh <delimited_identifier>
:
[Property With Space]
[HR-EmployeeID]
<quoted_identifier>
adalah string apa pun yang diapit oleh tanda kutip ganda. Tanda kutip ganda dalam pengenal direpresentasikan sebagai dua tanda kutip ganda. Tidak disarankan untuk menggunakan pengenal yang dikutip karena dapat dengan mudah disalahartikan sebagai konstanta string. Gunakan pengidentifikasi yang dibatasi jika memungkinkan. Berikut contoh dari <quoted_identifier>
:
"Contoso & Northwind"
pola
<pattern> ::=
<expression>
Keterangan
<pattern>
harus merupakan ekspresi yang dievaluasi sebagai string. Ini digunakan sebagai pola untuk operator LIKE. Ini dapat berisi karakter wildcard berikut:
%
: Karakter apa pun yang terdiri dari nol karakter atau lebih._
: Setiap karakter tunggal.
escape_char
<escape_char> ::=
<expression>
Keterangan
<escape_char>
harus merupakan ekspresi yang dievaluasi sebagai string panjang 1. Ini digunakan sebagai karakter pelarian untuk operator LIKE.
Misalnya, property LIKE 'ABC\%' ESCAPE '\'
mencocokkan ABC%
daripada string yang dimulai dengan ABC
.
constant
<constant> ::=
<integer_constant> | <decimal_constant> | <approximate_number_constant> | <boolean_constant> | NULL
Argumen
<integer_constant>
adalah rangkaian angka yang tidak diapit tanda kutip dan tidak berisi titik desimal. Nilai disimpan sebagaiSystem.Int64
secara internal, dan mengikuti rentang yang sama.Berikut adalah contoh konstanta panjang:
1894 2
<decimal_constant>
adalah string angka yang tidak diapit dalam tanda kutip, dan berisi koma desimal. Nilai disimpan sebagaiSystem.Double
secara internal, dan mengikuti rentang/presisi yang sama.Di versi yang akan datang, nomor ini mungkin disimpan dalam jenis data yang berbeda untuk mendukung semantik angka yang tepat, jadi Anda tidak boleh mengandalkan fakta bahwa jenis data yang mendasarinya adalah
System.Double
untuk<decimal_constant>
.Berikut adalah contoh konstanta desimal:
1894.1204 2.0
<approximate_number_constant>
adalah angka yang ditulis dalam notasi ilmiah. Nilai disimpan sebagaiSystem.Double
secara internal, dan mengikuti rentang/presisi yang sama. Berikut adalah contoh perkiraan konstanta angka:101.5E5 0.5E-2
boolean_constant
<boolean_constant> :=
TRUE | FALSE
Keterangan
Konstanta Boolean diwakili oleh kata kunci TRUE atau FALSE. Nilai disimpan sebagai System.Boolean
.
string_constant
<string_constant>
Keterangan
Konstanta string diapit dalam tanda kutip tunggal dan menyertakan karakter Unicode yang valid. Tanda kutip tunggal yang disematkan dalam konstanta string direpresentasikan sebagai dua tanda kutip tunggal.
fungsi
<function> :=
newid() |
property(name) | p(name)
Keterangan
Fungsi newid()
mengembalikan System.Guid
yang dihasilkan oleh metode System.Guid.NewGuid()
.
Fungsi property(name)
mengembalikan nilai properti yang direferensikan oleh name
. Nilai name
dapat berupa ekspresi valid apa pun yang mengembalikan nilai string.
Pertimbangan
Pertimbangkan semantik Filter Sql berikut ini:
Nama properti peka huruf besar/kecil.
Operator mengikuti semantik konversi implisit C# jika memungkinkan.
Properti sistem merupakan properti pada pesan Service Bus seperti yang dijelaskan dalam Pesan, payload, dan serialisasi.
Pertimbangkan semantik
IS [NOT] NULL
berikut:property IS NULL
dievaluasi sebagaitrue
jika salah satu properti tidak ada atau nilai properti adalahnull
.
Semantik evaluasi properti
Upaya untuk mengevaluasi properti sistem yang tidak ada memberikan
FilterException
pengecualian.Properti yang tidak ada dievaluasi secara internal sebagai tidak diketahui.
Evaluasi yang tidak diketahui dalam operator aritmatika:
Untuk operator biner, jika sisi kiri atau kanan operan dievaluasi sebagai tidak diketahui, maka hasilnya adalah tidak diketahui.
Untuk operator unary, jika operand dievaluasi sebagai tidak diketahui, maka hasilnya adalah tidak diketahui.
Evaluasi yang tidak diketahui dalam operator perbandingan biner:
Jika sisi kiri atau kanan operand dievaluasi sebagai tidak diketahui, maka hasilnya adalah tidak diketahui.
Evaluasi tidak diketahui di
[NOT] LIKE
:Jika ada operand yang dievaluasi sebagai tidak diketahui, maka hasilnya adalah tidak diketahui.
Evaluasi tidak diketahui di
[NOT] IN
:Jika operan kiri dievaluasi sebagai tidak diketahui, maka hasilnya adalah tidak diketahui.
Evaluasi tidak diketahui di operator AND:
+---+---+---+---+
|AND| T | F | U |
+---+---+---+---+
| T | T | F | U |
+---+---+---+---+
| F | F | F | F |
+---+---+---+---+
| U | U | F | U |
+---+---+---+---+
Evaluasi tidak diketahui di operator OR:
+---+---+---+---+
|OR | T | F | U |
+---+---+---+---+
| T | T | T | T |
+---+---+---+---+
| F | T | F | U |
+---+---+---+---+
| U | T | U | U |
+---+---+---+---+
Operator mengikat semantik
Operator perbandingan seperti
>
,>=
,<
,<=
,!=
, dan=
mengikuti semantik yang sama dengan operator C # yang mengikat dalam promosi tipe data dan konversi implisit.Operator aritmatika seperti
+
,-
,*
,/
, dan%
mengikuti semantik yang sama dengan operator C # yang mengikat dalam promosi tipe data dan konversi implisit.
Contoh
Misalnya, lihat Contoh filter Service Bus.