sql查询select子句,需要一个不返回几行的解决方案

iyzzxitl  于 2021-06-20  发布在  Mysql
关注(0)|答案(4)|浏览(248)

静态表中有一列,如下所示:

Vehicles  
-------------
Bike  
Truck  
car_2018  
car_2019  
car_2020  
car_2021  
Bus

select查询只需要获取基于查询年份的car行(例如,现在是2018年,如果我明年运行这个,它应该返回到2019年),其余的行不基于年份。需要一个解决方案。
到目前为止,我有:

SELECT Vehicles 
FROM VehicleMaster 
WHERE 'some where clause based on other columns'
ttcibm8c

ttcibm8c1#

我想你想要:

select t.*
from t
where t.vehicle = concat('car_', year(curdate())) or
      t.vehicle not regexp '[0-9]{4}$'

如果您想要一个通用的“任何当前年份或任何没有年份”,那么:

select t.*
from t
where t.vehicle like concat('%_', year(curdate())) or
      t.vehicle not regexp '[0-9]{4}$'
trnvg8h3

trnvg8h32#

您可以使用regex排除除当前年份之外的所有car######行。假设您的车辆列被称为 name ,这应该适合您:

select *
from Vehicles
where
  (
    -- Exclude all car_####
    not trim(name) REGEXP '^car_[0-9]{4}$'
    -- Except for the current year
    or name = concat('car_', year(now()))
  )
zysjyyx4

zysjyyx43#

select Vehicles 
from table_name
where Vehicles like '%2018'
union all 
select Vehicles 
from table_name
where Vehicles not like '%car%'
6tr1vspr

6tr1vspr4#

你可以用 substring_index 以下划线分隔该字段 _ 并在此基础上进行查询:

CREATE TABLE vehicles(f1 varchar(30));
INSERT INTO vehicles VALUES ('Bike'),
('Truck'),
('car_2018'),
('car_2019'),
('car_2020'),
('car_2021'),
('Bus');

SELECT f1
FROM vehicles
WHERE 
  f1 NOT LIKE 'car%'
  OR (f1 LIKE 'car%' AND substring_index(f1, "_", -1) = YEAR(CURDATE()));

+----------+
|    f1    |
+----------+
| Bike     |
| Truck    |
| car_2018 |
| Bus      |
+----------+

在这里摆弄

相关问题