我有一個列在此列名爲D1_VAL
MySQL的比較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
我該如何正確地做到這一點?
我有一個列在此列名爲D1_VAL
MySQL的比較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
我該如何正確地做到這一點?
這個查詢會做,
SELECT * FROM d1 WHERE CAST(SUBSTRING(`D1_VAL`, 3) AS UNSIGNED) > 5
但它能夠更好地規範喜歡C:10
兩個單獨的列中的值。
create table d1(
letter char(1),
number int,
// ... other columns
)
你試圖做的比較是什麼?
如果比較(上右擊結腸)對5的數量,嘗試這樣的事情:
3210有關字符串函數的詳細信息,請參閱here。另外,我會建議對數據庫設計有一個思考 - 也就是說,這一列的內容會更好地存儲在兩列中 - 例如,一個字符和一個整數?這會更有效率 - 需要更少的磁盤空間並允許更快的查詢。如果你有很多行,做各種字符串函數,強制轉換等等,可能會讓你的查詢運行速度很慢。
它在每個字符串的開頭總是一個字符加冒號還是可以變化? – zerkms
@zerkms它始終是一個字符+冒號 – Norse
如果將其分爲兩列,然後將第二列作爲適當的整型類型列處理,您將獲得更高效的搜索。 – Corbin