У мене проблема в 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)