来自 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.
我的 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.