I have 2 fields in my table one is called BarcodeStart AND BarcodeEnd what i want to do is search for a Barcode for example G1001 which appears between the BarcodeStart AND BarcodeEnd field. The table i have created is below
OrderID | BarcodeStart | BarcodeEnd |
---|---|---|
1 | G1000 | G1110 |
2 | G2000 | G2010 |
So if i search for G1001 i would like the query to return back Order ID 1 as G1001 is between the BarcodeStart AND BarcodeEnd field. I have tried the query below
SELECT OrderID FROM table WHERE
(
(LOWER(BarcodeEnd) = 'G1001' )
or
(LOWER(BarcodeStart) = 'G1001' )
or
(
LOWER(BarcodeStart) > 'G1001' and
LOWER(BarcodeEnd) < 'G1001'
)
)
by no luck the BarcodeStart
and BarcodeEnd
are varchar(100)
CodePudding user response:
Your comparisons are backwards. You want 'G1001' > BarcodeStart
. But you can simplify all of this by using the BETWEEN
operator.
SELECT OrderID
FROM mytable
WHERE 'G1001' BETWEEN BarcodeStart AND BarcodeEnd
CodePudding user response:
You have to use SUBSTRING_INDEX() function (https://www.w3schools.com/sql/func_mysql_substring_index.asp).
SELECT *
FROM (SELECT `OrderId`,
SUBSTRING_INDEX(`BarcodeStart`, 'G', -1) AS `Start`,
SUBSTRING_INDEX(`BarcodeEnd`, 'G', -1) AS `End`
FROM `Table1`) as `Table2`
WHERE `Start`<=SUBSTRING_INDEX('G1001', 'G', -1)
AND `End`>=SUBSTRING_INDEX('G1001', 'G', -1);
G10001 is the input value.
I hope it helps