/ / Підстановочний код користувача MySQL використовувати МЕЖДУ [дублікат] - mysql, regex

Користувальницькі символи MySQL використовують між собою [duplicate] - mysql, regex

У мене проблема в MySQL Query, це мій Запит:

select `BKC ID`,`Nama Pengirim`,sum(`¢ Koli`) as `Koli`,sum(`Harga`) as `Harga Barang`, sum(`Uang Administrasi`) as `Admin.`, sum(`Uang Penerus`) as `Uang Penerus`, `Tujuan`
from `transaksi`
join `transaksi barang`
ON `transaksi barang`.`BARANG ID` LIKE concat(`transaksi`.`BKC ID`, "-%")
WHERE `BKC ID` BETWEEN ("%1705%" AND "%1706%")
group by `BKC ID` DESC

але цей запит - ПОМИЛКА, помилка не можу використовувати WILDCARD у функції МЕЖ,

я не можу знайти альтернатив @ google.com (Seaching) Тип BKC ID є варшар, приклад "ABC170101102912"

заздалегідь дякую

Відповіді:

1 для відповіді № 1

Ті цифри, які ви хочете перевірити між ними, здаються, рік і місяць.

Тож у 2010–2019 роках це число завжди починатиметься з «1»

Отже, ви можете знайти позицію першого 1, а потім взяти наступні 4 символи з підрядком.

Потім порівняйте цю підрядку з діапазоном дат.

...
WHERE cast(substring(`BKC ID`, locate("1",`BKC ID`), 4) as unsigned) between 1701 and 1706
...

Це "припускаючи, що частина першої літери рядка не має фіксованої довжини.
Тому що якщо ви знаєте, що це завжди 3 символи, то це можна спростити:

...
WHERE cast(substring(`BKC ID`,4,4) as unsigned) between 1701 and 1706
...

0 для відповіді № 2

Якщо значення, яке ви хочете перевірити, починається з першого числового положення в рядку, ви можете зробити щось подібне

MariaDB [sandbox]> select "ABC170101102912",
->  cast(
-> SUBSTR("ABC170101102912",LEAST (
->     if (Locate("0","ABC170101102912") >0,Locate("0","ABC170101102912"),999),
->     if (Locate("1","ABC170101102912") >0,Locate("1","ABC170101102912"),999),
->     if (Locate("2","ABC170101102912") >0,Locate("2","ABC170101102912"),999),
->     if (Locate("3","ABC170101102912") >0,Locate("3","ABC170101102912"),999),
->     if (Locate("4","ABC170101102912") >0,Locate("4","ABC170101102912"),999),
->     if (Locate("5","ABC170101102912") >0,Locate("5","ABC170101102912"),999),
->     if (Locate("6","ABC170101102912") >0,Locate("6","ABC170101102912"),999),
->     if (Locate("7","ABC170101102912") >0,Locate("7","ABC170101102912"),999),
->     if (Locate("8","ABC170101102912") >0,Locate("8","ABC170101102912"),999),
->     if (Locate("9","ABC170101102912") >0,Locate("9","ABC170101102912"),999)
->   , length("ABC170101102912") ),4)
->   as int)   as NewString,
->
->    case when  cast(
-> SUBSTR("ABC170101102912",LEAST (
->     if (Locate("0","ABC170101102912") >0,Locate("0","ABC170101102912"),999),
->     if (Locate("1","ABC170101102912") >0,Locate("1","ABC170101102912"),999),
->     if (Locate("2","ABC170101102912") >0,Locate("2","ABC170101102912"),999),
->     if (Locate("3","ABC170101102912") >0,Locate("3","ABC170101102912"),999),
->     if (Locate("4","ABC170101102912") >0,Locate("4","ABC170101102912"),999),
->     if (Locate("5","ABC170101102912") >0,Locate("5","ABC170101102912"),999),
->     if (Locate("6","ABC170101102912") >0,Locate("6","ABC170101102912"),999),
->     if (Locate("7","ABC170101102912") >0,Locate("7","ABC170101102912"),999),
->     if (Locate("8","ABC170101102912") >0,Locate("8","ABC170101102912"),999),
->     if (Locate("9","ABC170101102912") >0,Locate("9","ABC170101102912"),999)
->   , length("ABC170101102912") ),4)
->   as int) between 1701 and 1706 then "Between"
->   else "not between"
->   end as isit;
+-----------------+-----------+---------+
| ABC170101102912 | NewString | isit    |
+-----------------+-----------+---------+
| ABC170101102912 |      1701 | Between |
+-----------------+-----------+---------+
1 row in set (0.00 sec)