如何用 sql 找到文件大小大于 500k 的

本贴最后更新于 266 天前,其中的信息可能已经事过境迁

思源笔记能用 sql 寻找文件大于 500kb 的文件吗?

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    25386 引用 • 104866 回帖
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    9709 引用 • 44171 回帖 • 90 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • sql 应该不行,但思源好像有获取目录信息的接口

  • 这有两种种情况,

    如果你说的是引用资源,用 SQL 办不到,思源数据库并未存储引用资源占用大小,需要查询结果后通过 js 来读取文件实现,

    如果你说的是思源笔记文档占用,这又分两种情况,

    如果你想查看的是.sy 文件的占用大小,这通过 SQL 也办不到,需要查询后 js 来读取文件实现,

    如果你说的是,纯文本内容,比如 Markdown 占用大小,这又分两种情况,

    如果你说的是精确占用,这很难,除非你把查询结果存为文件,然后再读取占用大小,

    如果你非得用 SQL 实现精确计算,这是非常困难的,除非你能考虑所有特殊情况,

    如果你说仅仅估算大小,SQL 还是可以算算的,

    如果你需要的不是估算,那么看到此就可以结束了。

    如果你能接受估算,请看下文:

    先说理论

    首先,不同的编码存储的文件占用大小是不一样的,这里以常用的 utf8 存储为例说明,我查看了下思源数据库也是 utf8 存储的。

    在 utf8 中,通常字节占用如下

    • 对于 ASCII 字符(包括英文字母、数字和大多数标点符号),每个字符占用 1 字节。
    • 对于非 ASCII 字符(如大部分欧洲语言字符),每个字符占用 2 字节。
    • 对于中文、日文和韩文字符,每个字符通常占用 3 字节。
    • 对于一些特殊字符或表情符号,每个字符可能占用 4 字节。

    这里不考虑其他情况,就假设以英文和中文为主,那么英文和中文的字节占比基本上就是 1:3

    那么,如果假设英文字符占比为 𝑥%,中文字符占比为 𝑦%,总字符数为 𝑛,那么可以使用以下公式来计算文件的大小(以字节为单位):

    计算公式

    文件大小 (字节)=(𝑥%×𝑛×1)+(𝑦%×𝑛×3)

    这里:

    • 𝑥%×𝑛 表示英文字符的数量,每个英文字符占用 1 字节。
    • 𝑦%×𝑛 表示中文字符的数量,每个中文字符占用 3 字节。

    示例

    假设总字符数 𝑛=1000,其中 20% 为英文字符,80% 为中文字符,那么:

    • 英文字符数量:0.2×1000=200
    • 中文字符数量:0.8×1000=800

    代入公式计算文件大小: 文件大小 (字节)=(0.2×1000×1)+(0.8×1000×3)=200+2400=2600

    再说 SQL

    有了以上公式就可以通过 SQL 计算了

    首先这里按照你说的文件是指文档块来理解,那么文档块下面通常分很多容器或叶子块,但它们的 root_id 都是同一个,即文档块的 id

    根据这个特点,我们通过嵌套查询就可以汇总出文档的所有块的 Markdown 文本占用大小了,不过超级复杂,仅当参考吧,下面这个 SQL 是 AI 生成的,就当作伪代码参考吧

    WITH markdown_lengths AS ( SELECT root_id, -- 计算英文字符数量 LENGTH(REPLACE(markdown, ' ', '')) FILTER (WHERE markdown ~ '[a-zA-Z0-9 ]') / LENGTH(markdown) * 100 AS x_percent, -- 计算中文字符数量 LENGTH(markdown) - LENGTH(REPLACE(markdown, ' ', '')) FILTER (WHERE markdown ~ '[a-zA-Z0-9 ]') / LENGTH(markdown) * 100 AS y_percent, -- 计算总字符数 LENGTH(markdown) AS n, -- 计算总字节数 (LENGTH(REPLACE(markdown, ' ', '')) FILTER (WHERE markdown ~ '[a-zA-Z0-9 ]') / LENGTH(markdown) * 100 * LENGTH(markdown) * 1 + (LENGTH(markdown) - LENGTH(REPLACE(markdown, ' ', '')) FILTER (WHERE markdown ~ '[a-zA-Z0-9 ]') / LENGTH(markdown) * 100 * LENGTH(markdown) * 3) / 100) AS markdown_bytes FROM blocks WHERE root_id IS NOT NULL ), subquery AS ( SELECT root_id, SUM(markdown_bytes) AS total_markdown_bytes FROM markdown_lengths GROUP BY root_id ) SELECT p.id AS parent_id, p.content AS title, p.hpath, p.markdown AS parent_markdown, COALESCE(s.total_markdown_bytes, 0) AS total_markdown_bytes FROM ( SELECT id, content, hpath, markdown FROM blocks WHERE root_id IS NULL ) p LEFT JOIN subquery s ON p.id = s.root_id WHERE COALESCE(s.total_markdown_bytes, 0) > 500000

    哈哈哈,看了后,我建议你还是用 js 来实现吧。

  • Muu

    术业有专攻 借用这个软件还是很快的能获取到 对应的文件的, 就是需要转换下 id 和名称

    image.png

推荐标签 标签

  • Vue.js

    Vue.js(读音 /vju ː/,类似于 view)是一个构建数据驱动的 Web 界面库。Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。

    267 引用 • 666 回帖
  • 面试

    面试造航母,上班拧螺丝。多面试,少加班。

    325 引用 • 1395 回帖 • 1 关注
  • ZooKeeper

    ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 HBase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

    59 引用 • 29 回帖
  • QQ

    1999 年 2 月腾讯正式推出“腾讯 QQ”,在线用户由 1999 年的 2 人(马化腾和张志东)到现在已经发展到上亿用户了,在线人数超过一亿,是目前使用最广泛的聊天软件之一。

    45 引用 • 557 回帖 • 1 关注
  • Sandbox

    如果帖子标签含有 Sandbox ,则该帖子会被视为“测试帖”,主要用于测试社区功能,排查 bug 等,该标签下内容不定期进行清理。

    432 引用 • 1250 回帖 • 595 关注
  • wolai

    我来 wolai:不仅仅是未来的云端笔记!

    2 引用 • 14 回帖 • 4 关注
  • 服务器

    服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。

    125 引用 • 585 回帖
  • Dubbo

    Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,是 [阿里巴巴] SOA 服务化治理方案的核心框架,每天为 2,000+ 个服务提供 3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。

    60 引用 • 82 回帖 • 615 关注
  • 浅吟主题

    Jeffrey Chen 制作的思源笔记主题,项目仓库:https://github.com/TCOTC/Whisper

    1 引用 • 28 回帖
  • 知乎

    知乎是网络问答社区,连接各行各业的用户。用户分享着彼此的知识、经验和见解,为中文互联网源源不断地提供多种多样的信息。

    10 引用 • 66 回帖
  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    116 引用 • 54 回帖 • 3 关注
  • Excel
    31 引用 • 28 回帖
  • 微信

    腾讯公司 2011 年 1 月 21 日推出的一款手机通讯软件。用户可以通过摇一摇、搜索号码、扫描二维码等添加好友和关注公众平台,同时可以将自己看到的精彩内容分享到微信朋友圈。

    133 引用 • 796 回帖 • 1 关注
  • Quicker

    Quicker 您的指尖工具箱!操作更少,收获更多!

    37 引用 • 157 回帖 • 3 关注
  • 安装

    你若安好,便是晴天。

    132 引用 • 1184 回帖 • 3 关注
  • Sym

    Sym 是一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)系统平台。

    下一代的社区系统,为未来而构建

    524 引用 • 4601 回帖 • 708 关注
  • Swagger

    Swagger 是一款非常流行的 API 开发工具,它遵循 OpenAPI Specification(这是一种通用的、和编程语言无关的 API 描述规范)。Swagger 贯穿整个 API 生命周期,如 API 的设计、编写文档、测试和部署。

    26 引用 • 35 回帖
  • Hadoop

    Hadoop 是由 Apache 基金会所开发的一个分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

    89 引用 • 122 回帖 • 618 关注
  • Flume

    Flume 是一套分布式的、可靠的,可用于有效地收集、聚合和搬运大量日志数据的服务架构。

    9 引用 • 6 回帖 • 654 关注
  • Love2D

    Love2D 是一个开源的, 跨平台的 2D 游戏引擎。使用纯 Lua 脚本来进行游戏开发。目前支持的平台有 Windows, Mac OS X, Linux, Android 和 iOS。

    14 引用 • 53 回帖 • 556 关注
  • Kotlin

    Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,由 JetBrains 设计开发并开源。Kotlin 可以编译成 Java 字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。在 Google I/O 2017 中,Google 宣布 Kotlin 成为 Android 官方开发语言。

    19 引用 • 33 回帖 • 77 关注
  • 尊园地产

    昆明尊园房地产经纪有限公司,即:Kunming Zunyuan Property Agency Company Limited(简称“尊园地产”)于 2007 年 6 月开始筹备,2007 年 8 月 18 日正式成立,注册资本 200 万元,公司性质为股份经纪有限公司,主营业务为:代租、代售、代办产权过户、办理银行按揭、担保、抵押、评估等。

    1 引用 • 22 回帖 • 788 关注
  • Visio
    1 引用 • 2 回帖 • 2 关注
  • IDEA

    IDEA 全称 IntelliJ IDEA,是一款 Java 语言开发的集成环境,在业界被公认为最好的 Java 开发工具之一。IDEA 是 JetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。

    181 引用 • 400 回帖
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 667 关注
  • flomo

    flomo 是新一代 「卡片笔记」 ,专注在碎片化时代,促进你的记录,帮你积累更多知识资产。

    6 引用 • 141 回帖 • 1 关注
  • 大疆创新

    深圳市大疆创新科技有限公司(DJI-Innovations,简称 DJI),成立于 2006 年,是全球领先的无人飞行器控制系统及无人机解决方案的研发和生产商,客户遍布全球 100 多个国家。通过持续的创新,大疆致力于为无人机工业、行业用户以及专业航拍应用提供性能最强、体验最佳的革命性智能飞控产品和解决方案。

    2 引用 • 14 回帖