SQL - 类似且大于函数
SQL - Like and greater than Function
我有如下数据集:
table_a
Product_Name Product_Orders
game_296 1
game_298 2
game_299 4
300_game 6
xyz_game 9
game-tyw 12
如何在 SQL 中使用 like
函数并与大于号组合?我的总体目标是过滤大于特定数字(如 297)的游戏。
理想情况下,我想做这样的事情:
select * from table_a
where Product_Name > ilike %297%
这里的预期输出是这样的:
Product_Name Product_Orders
game_298 2
game_299 4
300_game 6
可能是这样的:
select * from table_a
where Product_Name like %[2][9][8-9]% or Product_Name like %[3-9][0-9][0-9]%
我不知道你用的SQL,它可能是语法错误。
一种方法是从字符串中删除所有非数字,然后进行比较:
where cast(regexp_replace(product_name, '[^0-9]', '') as int) > 297
试试这个:
-- your input ....
WITH
indata(Product_Name,Product_Orders) AS (
SELECT 'game_296', 1
UNION ALL SELECT 'game_298', 2
UNION ALL SELECT 'game_299', 4
UNION ALL SELECT '300_game', 6
UNION ALL SELECT 'xyz_game', 9
UNION ALL SELECT 'game-tyw',12
)
-- real query starts here ...
SELECT
product_name
, product_orders
FROM indata
WHERE CAST(REGEXP_SUBSTR(product_name,'\d+') AS INTEGER) > 297;
-- out product_name | product_orders
-- out --------------+----------------
-- out game_298 | 2
-- out game_299 | 4
-- out 300_game | 6
-- out (3 rows)
我有如下数据集:
table_a
Product_Name Product_Orders
game_296 1
game_298 2
game_299 4
300_game 6
xyz_game 9
game-tyw 12
如何在 SQL 中使用 like
函数并与大于号组合?我的总体目标是过滤大于特定数字(如 297)的游戏。
理想情况下,我想做这样的事情:
select * from table_a
where Product_Name > ilike %297%
这里的预期输出是这样的:
Product_Name Product_Orders
game_298 2
game_299 4
300_game 6
可能是这样的:
select * from table_a
where Product_Name like %[2][9][8-9]% or Product_Name like %[3-9][0-9][0-9]%
我不知道你用的SQL,它可能是语法错误。
一种方法是从字符串中删除所有非数字,然后进行比较:
where cast(regexp_replace(product_name, '[^0-9]', '') as int) > 297
试试这个:
-- your input ....
WITH
indata(Product_Name,Product_Orders) AS (
SELECT 'game_296', 1
UNION ALL SELECT 'game_298', 2
UNION ALL SELECT 'game_299', 4
UNION ALL SELECT '300_game', 6
UNION ALL SELECT 'xyz_game', 9
UNION ALL SELECT 'game-tyw',12
)
-- real query starts here ...
SELECT
product_name
, product_orders
FROM indata
WHERE CAST(REGEXP_SUBSTR(product_name,'\d+') AS INTEGER) > 297;
-- out product_name | product_orders
-- out --------------+----------------
-- out game_298 | 2
-- out game_299 | 4
-- out 300_game | 6
-- out (3 rows)