2015-10-15 31 views
0

我試圖過濾varchar列上的數字範圍。我有一個電視產品標題列表,並希望將它們放入大小的存儲桶中,例如「42英寸或更小」。在這個陳述中是否可以使用類似< = 42的東西?SQL:在varchar列的LIKE情況下過濾一系列數字

CASE WHEN UPPER(table1.TITLE) LIKE '%42 IN%' 
     THEN '42 inches or smaller' 
ELSE 'Other' END As TV_Type 

LIKE語句需要還包含文本,作爲車型名稱可以包含其他的數字,我不希望捕捉電視與50英寸桶的標題是「三星40寸電視型號1250」 。

任何想法將不勝感激!基於新的數據

感謝, 的Fab

+1

你的桌子沒有大小的列嗎? – jarlh

+0

是的,但不幸的是,存在相當多的錯誤分類,並且所有條目中的相當大的一部分未被分類。 – Fab

+0

然後我會寫一個查詢來清理數據,然後開始使用你的列。 –

回答

-1

更新。

with table1 as 
(
select '45 inches' as title from dual 
union 
select '36 inches' from dual 
union 
select 'Panasonic TX-40C300B 1080p Full HD LED 40 Inch TV' from dual union 
select 'UE40H5000 40" Full HD LED Backlit TV' from dual union 
select 'Samsung Series 6 JU6500 Smart 4K Ultra HD Curved LED 40 Inch TV' from dual 

) 
select case when trimsize <= 42 
    THEN '42 inches or smaller' 
    ELSE 'Greater than 42 inches' 
    end as TV_Type 
from(
select case when instr(upper(title),'INCH') > 0 then 
trim(substr(title,instr(upper(title),'INCH')-4,3)) 
when instr(title,'"') > 0 then 
trim(substr(title,instr(title,'"')-2,2)) 
end as trimsize 
from table1) tmp1 

首先,我決定,如果你輸入的字符串有"INCH關鍵字。基於此,我正在採取先前的價值並修剪它。

注意:如果您有40和英寸之間的額外空間,那麼這是行不通的。另外,如果電視大小是3位數,那麼它可能無法工作。但除此之外,你應該很好。

+0

感謝您的這一點。您之前要求提供一些示例標題: 「Panasonic TX-40C300B 1080p全高清LED 40英寸電視」; 「UE40H5000 40」全高清LED背光電視「; 」三星系列6 JU6500智能4K超高清彎曲LED 40英寸電視「 如果我正確理解您的解決方案,它會有數字以外的尺寸以英寸,對吧? – Fab

+0

你必須給出一些TITLE列的例子,它總是以'Samsung XX inch ...'開頭嗎? – Utsav

+0

不幸的是這些標題並不統一(見上面的例子) – Fab