2015-11-25 20 views
4

我正在使用一個表格,該表格使用的年份範圍爲我需要的某些數據,以便能夠在這些範圍之間選擇一年的記錄。如何在一個字段中使用年數範圍執行MySQL查詢

| id | Make  | Model  | Year  | 
|----------------|------------|------------ | 
| 1 | Chevrolet | Camaro  | 2008  | 
| 2 | Chevrolet | Camaro  | 2009 - 2014 | 
| 3 | Dodge  | Avenger | 2010 - 2015 | 
| 4 | Dodge  | Challenger | 2008 - 2016 | 
| 5 | Ford  | Escape  | 2013  | 
| 6 | Ford  | Mustang | 2004 - 2012 | 
| 7 | Ford  | Mustang | 2015  | 

例如,我希望能夠與上年的2012選擇所有車輛。

這應返回:,,和給出下面的示例表。

回答

2

使用LEFTRIGHT確定範圍。

SELECT * 
FROM yourtable 
WHERE (LEFT(Year,4) <= '2012' AND RIGHT(Year,4) >= '2012') 

OUTPUT:

id Make  Model  Year 
2 Chevrolet Camaro  2009 - 2014 
3 Dodge  Avenger  2010 - 2015 
4 Dodge  Challenger 2008 - 2016 
6 Ford  Mustang  2004 - 2012 

SQL小提琴:

+0

不是第一次條件有害嗎?你會接受一些奇怪的數據,比如'a2012445。^',並且你的第二個條件已經捕獲了'2010-2012','2012-2013'以及'2012'。 –

+0

@JulienBlanchard絕對正確!它實際上也是多餘的! – Matt

0

可能是這樣的: 當然,如果所有具有年份範圍的列都在相同的上下文中,那麼您必須檢查表,否則這將不起作用。

select * 
from table 
where (Year = '2012' and substring(Year, 6, 1) <> '-') 
or ( substring(Year, 6, 1) = '-' 
    and substring(Year, 1, 4) <= '2012') 
    and substring(Year, 8, 4) >= '2012')) 
0

如果Year列保證始終有一兩年,那麼你可以做這樣的事情:

SELECT 
    * 
FROM 
    `my_table` 
WHERE 
    CAST(LEFT(`Year`, 4) AS SIGNED) <= 2012 
    AND CAST(RIGHT(`Year`, 4) AS SIGNED) >= 2012 

這將捕獲一列20122000 - 2015等,等

0

可以使用Get啓動和使用LEFT/RIGHT結束一年:

SELECT * 
FROM (
    SELECT *, CAST(LEFT(Year, 4) AS INT) AS s, CAST(RIGHT(Year,4) AS INT) AS e 
    FROM tab 
) AS sub 
WHERE sub.s <= 2012 AND sub.e >= 2012; 

LiveDemo

0

爲此,我先試試,所以你必須重組數據庫兩個單獨的領域爲最大和最小年份。但是,有時候我們會堅持別人的糟糕的設計決定。在這種情況下,substring_index()無聲轉化爲有用:

select t.* 
from t 
where 2012 >= (year + 0) and -- does silent conversion on the first value in the field 
     2012 <= (substring_index(year, ' - ', -1) + 0); 

如果您輸入年爲一個字符串,你不需要沉默的轉換:

select t.* 
from t 
where '2012' >= substring_index(year, ' - ', 1) and 
     '2012' <= substring_index(year, ' - ', -1); 
1
SELECT t.* 
FROM t WHERE LEFT(Year,4) <= '2012' AND RIGHT(Year,4) >= '2012' 
相關問題