双引号 vs 反引号:Go 字符串处理到底该怎么选

Go 里双引号字符串和反引号字符串并不是写法偏好之争,而是两种处理规则。双引号支持转义,适合普通文本;反引号保留原样、支持多行,写 SQL、模板和正则时往往更清晰。理解它们的边界,代码会更好读也更少出错。

双引号 vs 反引号:Go 字符串处理到底该怎么选

SQL 视图中如何格式化日期和时间字段

在 SQL 视图里直接格式化日期时间字段,技术上可行,但多数场景并不划算。因为一旦把日期转成字符串,索引利用、排序语义和跨数据库兼容性都会受影响。只有下游明确只接收字符串、且不再做日期计算时,才适合把格式化逻辑固定在视图中。

SQL 视图中如何格式化日期和时间字段

SQL 中如何计算每组同比增长率?

SQL 里算同比,关键不是“取上一行”,而是准确对到“去年同一周期”。文章拆开说明为什么 `LAG(value, 1)` 常被误用成环比,再给出更稳妥的 `LEFT JOIN + 日期偏移` 做法,以及在何种前提下 `LAG(value, 12)` 才能成立。 同比增长率最容易写错的地方,不是公式本身,而是把“去年同周期”误写成“上一行数据”。

SQL 中如何计算每组同比增长率?

SQL 中如何统计满足条件与不满足条件的数据

在 SQL 里同时统计“满足条件”和“不满足条件”的数量,看起来简单,但一旦遇到 NULL、分组和跨数据库差异,结果很容易偏。本文用可直接落地的写法说明为什么应优先使用两个 `SUM(CASE WHEN ...)`,并补齐分组比例、兼容性和 NULL 检查这几个关键点。

SQL 中如何统计满足条件与不满足条件的数据

如何避免把用户输入直接拼接到 SQL 语句

避免 SQL 注入,关键不在转义技巧,而在彻底停止把用户输入拼进语句。文章从转义函数失效原因讲起,说明 PHP 与 Python 中参数化查询的正确姿势,并给出动态表名、列名和排序字段的白名单处理办法。

如何避免把用户输入直接拼接到 SQL 语句

SQL 中如何计算分组移动平均值?

分组移动平均在 SQL 里不难,真正容易出错的是窗口怎么定义、分组是否隔离,以及数据库版本对 `ROWS`、`RANGE` 的支持差异。本文按 MySQL、PostgreSQL、SQL Server 与 SQLite 分别梳理可用写法,并补上边界行与 `NULL` 处理时最常见的误区。

SQL 中如何计算分组移动平均值?

如何为 SQL 视图优化索引和执行计划

SQL 视图本身不存数据,查询性能几乎完全取决于展开后的底层 SQL 是否能正确利用索引。本文围绕视图变慢时最常见的几个根因,梳理如何看执行计划、怎样设计复合与覆盖索引,以及何时该把复杂视图改成 CTE 或物化方案。

如何为 SQL 视图优化索引和执行计划

SQL 触发器递归调用问题如何解决

SQL 触发器最容易踩坑的场景之一,就是在触发器内部再次改动自己监听的表。不同数据库对这类递归的处理方式完全不同:有的直接报错,有的默认允许但要求手动拦截。本文按 MySQL、SQL Server、PostgreSQL 与 SQLite 分别梳理限制、报错和可行替代方案。

SQL 触发器递归调用问题如何解决

如何使用 SQL EXPLAIN 分析 SELECT 执行计划

看 MySQL 的 EXPLAIN,真正有判断价值的字段并不多,核心是 type、key、rows、filtered 和 Extra。本文按“先看什么、为什么要用 JSON、哪些结论必须二次验证、跨数据库怎么避免误判”四个问题展开,帮助你把执行计划从“会看”变成“能据此定位问题”。

如何使用 SQL EXPLAIN 分析 SELECT 执行计划

如何用 SQL LEAD 获取下一行数据

LEAD 能取“下一行”数据,但前提不是写出函数名,而是先把窗口顺序定义清楚。本文围绕常见报错、结果大量为 NULL、以及 offset 与 default 的设置陷阱,梳理 LEAD 在 SQL 中最容易出错的几个关键点。 很多人把 LEAD 当成“自动取下一行”的快捷函数,真正落地时却常常遇到报错、结果错位,或者莫名出现大量 NULL 。

如何用 SQL LEAD 获取下一行数据

如何在 Java 8 项目中防止 SQL 注入

在 Java 8 项目里,防 SQL 注入不能靠“过滤关键字”这类经验做法,真正有效的是把 SQL 结构和用户输入彻底隔离。本文围绕 JDBC、MyBatis、异常处理和输入校验四个环节,梳理哪些写法安全、哪些地方最容易失守。

如何在 Java 8 项目中防止 SQL 注入