2012-04-30 110 views
1

我有一個列在此列名爲D1_VALMySQL的比較VARCHAR列

該行有一個看起來像這樣的數據:

C:10 
R:200 
E:3 
N:77 

我試圖做這些值的搜索與邏輯運營商。我試過這個:

SELECT * FROM d1 WHERE CAST(`D1_VAL` AS UNSIGNED) > 5 

它不返回任何行。我也試過:

SELECT * FROM d1 WHERE (0 + `D1_VAL`) > 5 

我該如何正確地做到這一點?

+1

它在每個字符串的開頭總是一個字符加冒號還是可以變化? – zerkms

+0

@zerkms它始終是一個字符+冒號 – Norse

+2

如果將其分爲兩列,然後將第二列作爲適當的整型類型列處理,您將獲得更高效的搜索。 – Corbin

回答

5

這個查詢會做,

SELECT * FROM d1 WHERE CAST(SUBSTRING(`D1_VAL`, 3) AS UNSIGNED) > 5 

但它能夠更好地規範喜歡C:10兩個單獨的列中的值。

create table d1(
    letter char(1), 
    number int, 
    // ... other columns 
) 
1

你試圖做的比較是什麼?

如果比較(上右擊結腸)對5的數量,嘗試這樣的事情:

​​3210

有關字符串函數的詳細信息,請參閱here。另外,我會建議對數據庫設計有一個思考 - 也就是說,這一列的內容會更好地存儲在兩列中 - 例如,一個字符和一個整數?這會更有效率 - 需要更少的磁盤空間並允許更快的查詢。如果你有很多行,做各種字符串函數,強制轉換等等,可能會讓你的查詢運行速度很慢。