Mysqli

varchar 數據類型的操作符之間

  • September 8, 2016

我的“hdd”列的值為“1GB”、“500GB”、“1TB”和“100TB”

當檢索值在 1TB 和 100 TB 之間的行時,如下所示:

select * from product where hdd between '1TB' and '100TB'

它還返回包含 1GB 的行。

也試過這樣:

select *
from product
where cast(replace(hdd, 'TB','') as int) between 1 and 100

它說’)int附近的錯誤

我正在使用 mysqli。

您擁有的列是 VARCHAR,因此 RDBMS 應用的排序將是字母而不是數字。

如今,HDD 的最小儲存單元是多少?國標?解決問題的一種方法是創建另一個將儲存轉換為 GB(或其他單位)的列。確保此列是整數或數字,而不是 VARCHAR。使用您的範例數據並假設每 TB 1000 GB:

'1GB', 1
'500GB', 500
'1TB', 1000
'100TB', 100000

過濾第二列是獲得所需結果的更直接的方法。

如果您不想創建新列,則可以在 SQL 查詢中進行該轉換,但會很麻煩。

1GB、100TB 等只是文本字元串,沒有關於哪個更大的算術意義。我假設您的列只有一個值,例如 1GB 或 500GB,而不是所有這些值

我認為您必須嘗試使用 REPLACE(hdd,‘GB’,000000) 或 REPLACE(hdd,‘TB’,000000000) 並在兩者之間使用數字比較。

它絕對不會發揮最佳效果。

引用自:https://dba.stackexchange.com/questions/149100