2015-06-13 16 views
0

我有一個所謂的「配合」字段包含逗號分隔值是這樣的:逗號分隔的領域內搜索的範圍

120102199105199205,130101199105199205,120101199107199201

其中對於每個數前6位數字是配件代碼,最後12位數字是唯一的日期範圍。現在

,我知道,CSV是骯髒和違反1NF,但另一種方法是將數據歸爲一對夫婦更表,將在努力保持它是因爲記錄

所以潛在數量滔天簡單我試圖編寫一個查詢來選擇行的基礎上提供的配件代碼和日期範圍。到目前爲止,我有這樣的:

select data from table 
where fits = any(
    SELECT fits 
    FROM table 
    WHERE fits LIKE '120102') 
AND fits BETWEEN "120102199105000000" AND "120102999999199205" 

的問題是,在BETWEEN ... AND不與CSV數據

工作是否有應用範圍查詢與某種方式通配符到這種類型的CSV數據,還是唯一的SQL端解決方案來規範化?

+0

很明顯,您最好的解決方案是生成一個合理的模式,將數據分隔成fit,date1,date2列,併爲每個元組添加行。說這會產生「太多的記錄」是一個愚蠢的原因,不這樣做。 –

+0

您可以從找到的匹配記錄中生成一個派生表:CONCAT(''fits','')LIKE',120102%'但它不會是一般的 –

回答

0

如果您想在您的「適合」列中使用BETWEEN值,則需要對數據進行歸一化。

這不應該是一個問題。潛在的行大小有多大?對於現代數據庫服務器而言,您會驚訝地發現有多少記錄不成問題。

1百萬,10百萬,1億對於任何RDMS mysql,mariadb,mssql,postgresSQL在現代PC上確實不成問題。

正常化您的數據,一切都會更容易。

+0

謝謝!是的,我咬緊牙關並將其歸一化。 – user3312739