不止like和incj2sql扩展SQL关键字全清单between、exists、caseWhen一次讲透【免费下载链接】cj2sql将仓颉代码转换成 SQL项目地址: https://gitcode.com/Cangjie-SIG/cj2sqlcj2sql 是一个将仓颉代码转换成 SQL 的开源工具而它的扩展 SQL 关键字是最让新手上头的功能用仓颉函数调用的方式写出between、exists、caseWhen、like、in等 SQL 条件编译期自动展开成标准 SQL免去手工拼接字符串的痛苦。一、cj2sql 扩展 SQL 关键字全清单cj2sql 通过枚举ExtSql声明所有扩展 SQL 关键字定义见 src/sql/use.cj完整清单如下关键字作用生成的 SQLlike/notLike原生模糊匹配col LIKE abclikeLeft/likeRight/likeAll左/右/全模糊col LIKE abc%等notLikeLeft/notLikeRight/notLikeAll反向模糊col NOT LIKE ...inn/notIn列表包含col IN (1, 2, 3)between/notBetween区间判断col BETWEEN 1 AND 5exists/notExists子查询存在性EXISTS (SELECT ...)caseWhen条件表达式CASE WHEN ... ENDnull/notNull判空配合iscol IS NULLasc/desc排序方向配合iscol ASC / DESCnot逻辑非NOT (expr)二、两步上手导入 声明使用规则非常简单ExtSql.关键字(参数列表)前缀ExtSql.可以省略。import cj2sql.macros.cjSql // 宏 import cj2sql.sql.ExtSql // 扩展 SQL 关键字 import cj2sql.sql.select只需给函数标注cjSql宏函数体内的 DML 代码就会在编译期被解析、展开成 SQL。整个解析流程可以这样理解其中「扩展关键字」就是由CallExprParser分发给BaseCallExtKeyParser系列解析器完成的参见 src/macros/parser/call_ext_keyword_parser.cj。三、between区间条件怎么写规则between(列, 开始值, 结束值)反向用notBetween。let five 5 between(user.id, 1, five) // user.id BETWEEN 1 AND ?参数支持字面量或变量变量会被生成为绑定参数?天然防止 SQL 注入。解析逻辑见 call_ext_key_between_parser.cj参数个数不对时会在编译期直接报错非常省心。四、exists子查询存在性判断规则exists(子查询)反向用notExists。exists(user.subQueryRoleTest { r r.select { r.id }.filter { r.id 2 } }) // EXISTS (SELECT r.id FROM role_test r WHERE r.id 2)「查主表 判断关联表里是否存在记录」这类常见需求一行exists就搞定不用手写嵌套查询字符串。解析器在 call_ext_key_exists_parser.cj。五、caseWhen把 if/match 直接变 CASE WHEN规则caseWhen(if或match表达式)可用作 select 列需配合as。caseWhen(if (user.id 1) { user.id } else { user.roleId }) 1 // (CASE WHEN user.id 1 THEN user.id ELSE user.role_id END) 1写法很巧妙仓颉里的if/else和match表达式会一一映射成 SQL 的WHEN/THEN/ELSE多级else if也支持解析实现见 call_ext_key_case_parser.cj。六、like 与 in不只是简单匹配除了原生likecj2sql 还提供了likeLeft/likeRight/likeAll三种模糊匹配无需手动拼%likeRight(user.name, cang) // user.name LIKE cang% likeAll(user.name, jie) // user.name LIKE %jie% inn(user.id, 1, 2, 3) // user.id IN (1, 2, 3)inn还支持传入数组变量甚至直接传入子查询let list [10, 20, 30] inn(user.id, list) // user.id IN (?, ?, ?)七、null / notNull / asc / desc用 is 关键字这四个关键字配合仓颉的is语法使用读起来和原生 SQL 几乎一致user.id is null // user.id IS NULL user.id is notNull // user.id IS NOT NULL user.roleId is desc // user.role_id DESC八、底层原理一切皆语法树节点每个扩展关键字最终都会转成 SQL 语法树中的表达式节点如SqlBetweenExpr、SqlExists、SqlCaseExpr再经方言层渲染成 MySQL / Oracle / PostgreSQL / SQLServer 的具体 SQL结构可参考官方设计文档 doc/design.md表达式节点源码集中在 src/sql/expr/工具方法见 ExprUtil。九、总结cj2sql 的扩展 SQL 关键字让「写 SQL」变成了「写仓颉」✅清单全覆盖like 家族、in、between、exists、caseWhen、判空与排序一次配齐✅编译期展开参数错误在编译阶段就报错运行零风险✅多数据库方言同一份代码可渲染多种数据库 SQL更多实战示例增删改查全流程可直接阅读 doc/use.md跟着文档走一遍即可上手。【免费下载链接】cj2sql将仓颉代码转换成 SQL项目地址: https://gitcode.com/Cangjie-SIG/cj2sql创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
电子课本解析下载:从一条智慧教育平台链接到本地PDF,给老师和学生 电子课本解析下载:从一条智慧教育平台链接到本地PDF,给老师和学生 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获取… · 2026/9/24 17:24:48
解决 lock 无法跨 await 问题 你定义的这行代码非常标准,是解决 lock 无法跨 await 问题的正确做法。
private readonly System.Threading.SemaphoreSlim dataBandLock new System.Threading.SemaphoreSlim(1, 1);这里的 (1, 1) 含义是:
第一个 1:初始可用许可数为 1&… · 2026/9/24 17:24:42
无人驾驶公共汽车指挥调度通信技术实践:基于SIP的三级联动调度架构解析 摘要:本文以北京某自动驾驶企业无人驾驶公共汽车项目为背景,解析基于SIP协议的融合指挥调度系统在“总部—分中心—车辆”三级联动场景下的技术实现。该方案采用成都添闰通讯技术有限公司自主研发的添添呼融合指挥调度系统,私有化部署于客户自… · 2026/9/24 17:24:35
雷达测角基础 相位测角法两天线相位法测角原理图示中黑色倒三角,分别为天线1和2,当目标距离两天线远距离时,那么目标与两天线的连线,即黑色虚线和黄色虚线,可近似看为平行。以天线2向目标与天线1的连线做垂直线,即蓝色虚… · 2026/9/24 17:54:28
单片机物联网|毕设答辩|毕业设计项目|观赏鱼缸控制系统设计 标题:观赏鱼缸控制系统设计文档介绍:1 绪论1.1 研究背景及意义城市化进程持续推进,现代都市居民的生活节奏变得更快,工作压力不断加大,人们对于精神文化生活的追求愈加强烈,在此情形下,观赏鱼养… · 2026/9/24 17:54:28
读书有感:“换位思考”新的解读 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 17:54:28
专利说明书的技术方案:先摆清要达成什么,再倒推哪几处非写不可 技术方案写不写到可实施,不看篇幅,看倒推得动不动:先把要达成的技术效果摆出来,再看每一处动作、结构与参数是被哪条效果逼出来的。落笔前有两样可先用:一样立起层级,交免费智能大纲;一样把结构… · 2026/9/24 17:54:21
DeepSeek LeetCode 103. 二叉树的锯齿形层序遍历 Python3实现 LeetCode 103. 二叉树的锯齿形层序遍历 Python3 实现
思路
与普通层序遍历相同,使用队列逐层处理。区别在于需要交替改变每层的遍历方向:维护布尔变量 left_to_right 表示当前层方向。每层用一个 deque 收集节点值:从左到右:… · 2026/9/24 17:54:15
DeepSeek LeetCode 103. 二叉树的锯齿形层序遍历 Golang实现 LeetCode 103. 二叉树的锯齿形层序遍历 Golang 实现
思路
与普通层序遍历一致,用队列逐层处理。区别在于需要交替改变每层的填充方向:维护布尔变量 leftToRight 表示当前层方向。每层预分配 level : make([]int, size):从左到右&#x… · 2026/9/24 17:54:15
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44