来自 SQL table 的 Select 行在文件大小范围内

Select rows from SQL table within file size range

我的 table 中有一列以人性化的格式表示文件大小。例如,25MB、300B、76.5KB 等。我将如何编写一个查询,使 select 行在一个大小范围内?例如在 150kb 和 6mb 之间或在 35mb 和 1.2GB 之间?

我已经学会了如何按文件大小排序,这是一个类似的问题,但我无法将其用于这些目的。

我可以获得一系列在我的范围内的文件,但是像 9mb 这样的文件将比 150mb 的文件排序更高。

您可以将该值转换为实际数字。一种方法是显式翻译每个后缀:

select (case when size like '%KB' then 1000
             when size like '%MB' then 1000000
             when size like '%GB' then 1000000000
             else 1
        end) * (size + 0.0)
from table_name 
where size between 750 and 1000

两个注意事项。 "MB" 等后缀是不明确的。它可以表示 1,000,000 或 2^20 (1,048,576)。这意味着因素可能不同。

size + 0.0 使用 SQLite 的功能根据前导数字进行隐式转换。

您可以通过 Row Values inside a CTE 存储 B、KB、MB、GB 和 TB 中每一个的字节值,并在您要执行搜索时使用它们:

with cte(suffix, bytes) as (
  select * from (
    values 
      ('B', 1), ('KB', 1024), ('MB', 1024 * 1024), 
      ('GB', 1024 * 1024 * 1024), ('TB', 1024 * 1024 * 1024 * 1024)
  )
)
select f.* from filtered f 
where 
  f.size * (select max(bytes) from cte where f.size like '%' || suffix) 
  between 
  '150MB' * (select max(bytes) from cte where '150MB' like '%' || suffix) 
  and 
  '6GB' * (select max(bytes) from cte where '6GB' like '%' || suffix) 

用您的搜索值替换 '150MB''6GB'
参见 demo.