Rumah > Soal Jawab > teks badan
Saya ingin mencipta prosedur tersimpan yang menerima pelbagai integer dan beberapa input lain seperti:
CREATE PROCEDURE test (field1 varchar(4), field2 varchar(4), array varchar (255))
Dalam stored procedure saya nak guna macam ni:
... WHERE some_field IN (array) ...
Masalahnya ialah dengan cara ini saya hanya mendapat baris yang sepadan dengan integer pertama dalam tatasusunan.
Adakah ada cara untuk menjadikannya berfungsi (saya juga cuba menggunakan FIND_IN_SET
但它的作用与 IN
betul-betul sama)?
Panggilan yang saya buat untuk menguji prosedur tersimpan ialah CALL test (12, 13, '1, 2, 3')
.
P粉5904283572023-11-04 09:16:19
Tiada konsep tatasusunan. Jadi ini mungkin yang anda boleh lakukan
array
变量的值为'1, 2, 3'
anda sebagai rentetan
Pisah rentetan menggunakan ,
sebagai pembatas,
Masukkan setiap nilai ke dalam jadual sementara
Jadi meja sementara anda akan mempunyai 1,2,3
Akhirnya gunakan sahaja meja sementara anda
P粉7138664252023-11-04 00:46:05
FIND_IN_SET() berfungsi, tetapi anda tidak boleh mempunyai ruang dalam rentetan nombor.
Demo:
mysql> select find_in_set(2, '1, 2, 3'); +---------------------------+ | find_in_set(2, '1, 2, 3') | +---------------------------+ | 0 | +---------------------------+ mysql> select find_in_set(2, '1,2,3'); +-------------------------+ | find_in_set(2, '1,2,3') | +-------------------------+ | 2 | +-------------------------+
Jadi anda harus membentuk senarai tanpa ruang sebelum menghantarnya ke prosedur, atau gunakan REPLACE() dalam prosedur untuk mengalih keluar ruang.