当前位置: 首页 > news >正文

SQL 中的大小写规则总结:关键字、函数名不区分大小写(建议大写),字符串值、日期格式符严格区分大小写

SQL大小写规则总结:SQL关键字不区分大小写(建议大写),但字符串值、日期格式符严格区分大小写。


表名/列名在Oracle中默认转大写,MySQL通常不区分(受平台影响)。


使用双引号时对象名必须精确匹配大小写。


函数名(如TO_CHAR、NVL)和NULL关键字不区分大小写,但日期格式符必须大写。


最佳实践:关键字全大写,对象名统一大小写,避免使用双引号,字符串值保持存储时的大小写格式。


不同数据库的具体实现略有差异,建议遵循统一的代码规范以确保兼容性。


SQL中的大小写规则总结


SQL 大小写问题一览表,涵盖语法关键字、标识符(表名/列名)、字符串值、日期格式符等常见场景。


SQL 大小写规则总结表

类别是否区分大小写说明示例
SQL 关键字不区分SELECT、FROM、WHERE、AND、OR、NOT、ORDER BY 等,可大写、小写或混写,但惯例推荐大写以增强可读性。select * from emp;
SELECT * FROM EMP;
SeLeCt * FrOm Emp;✅(可行但极不规范)
表名、列名等对象名⚠️视数据库而定-Oracle / PostgreSQL / DB2:默认区分大小写,但会将未加引号的名称自动转为大写进行存储和比较。
-MySQL / SQL Server:默认不区分大小写,但受操作系统及排序规则影响,通常不强制。
-通用最佳实践统一使用大写或小写定义,查询时不加引号。
SELECT * FROM emp;(若表定义为EMP,则 Oracle 中emp会被转为EMP并找到)
SELECT * FROM "Emp";(Oracle 中必须精确匹配大小写,很少用)
字符串与日期值严格区分大小写存储在数据库中的字符串或日期字面量,等值比较时必须大小写完全匹配WHERE ENAME = 'SMITH'
WHERE ENAME = 'Smith'❌(查不到 'SMITH')
日期格式符严格区分大小写TO_CHARTO_DATE等函数中的格式代码必须使用大写,小写会被视为普通文本或报错。TO_CHAR(HIREDATE, 'YYYY-MM-DD')
TO_CHAR(HIREDATE, 'yyyy-mm-dd')❌(Oracle 报错)
列别名不区分大小写别名的名称本身不区分大小写,但显示时如需保留空格或大小写,需加双引号SELECT ENAME AS "Name"(显示为 Name)
SELECT ENAME AS name(显示为 NAME)
双引号内的内容严格区分大小写双引号用于强制保留标识符的大小写或支持特殊字符。一旦使用,查询时必须完全匹配。SELECT * FROM "EmpTable";(必须与创建时的命名完全一致)

分数据库详细行为表

数据库表名/列名(无引号)表名/列名(有双引号)字符串值关键字
Oracle自动转为大写,不区分大小写严格区分大小写区分大小写不区分
MySQL取决于操作系统和排序规则(Linux 下通常区分,Windows 下不区分),但建议统一严格区分大小写区分大小写不区分
SQL Server不区分大小写(默认排序规则)严格区分大小写区分大小写不区分
PostgreSQL自动转为小写,不区分大小写严格区分大小写区分大小写不区分

错误与正确示例对照表

场景❌ 错误示例✅ 正确示例
字符串匹配WHERE ENAME = 'smith'(表中存的是 'SMITH')WHERE ENAME = 'SMITH'
日期格式TO_CHAR(HIREDATE, 'yyyy-mm-dd')TO_CHAR(HIREDATE, 'YYYY-MM-DD')
对象名(Oracle)SELECT * FROM emp;(表定义时为EmpSELECT * FROM "Emp";(不推荐)
或创建时统一用大写:CREATE TABLE EMP
关键字风格select * from emp where deptno = 20(可读性差)SELECT * FROM EMP WHERE DEPTNO = 20
双引号别名SELECT ENAME AS "name"(却想显示为 'NAME')SELECT ENAME AS "NAME"

最佳实践速记表

建议说明
关键字全大写SELECTFROMWHEREORDER BY
表名、列名全大写(或全小写)统一风格,避免跨数据库问题,如EMPDEPTNO
字符串字面量保持原始大小写数据库中存的是什么样,查询就写什么样
日期格式符全部大写YYYY-MM-DD HH24:MI:SS
尽量避免使用双引号除非必须保留大小写或使用特殊字符
别名不加双引号(除非需要空格或大小写)AS 月薪AS "Monthly Salary"

一句话总结

关键字不区分大小写(建议大写),字符串和日期格式符严格区分大小写,对象名在 Oracle 中默认转大写,在 MySQL 中通常不区分但受平台影响,用双引号时则必须精确匹配。


补充:TO_CHAR()NULL及其他函数的大小写要求


以下是对上一份表格的补充内容,涵盖TO_CHAR()NULLNVL()等常用函数的大小写规则。


补充内容总结表

类别是否区分大小写说明示例
TO_CHAR() / TO_DATE()函数名不区分
格式符严格区分
函数名本身不区分大小写,但内部的日期格式符必须大写to_char(HIREDATE, 'YYYY-MM-DD')
TO_CHAR(HIREDATE, 'yyyy-mm-dd')
NULL不区分NULL是 SQL 关键字,可写nullNullNULL,但惯例全大写WHERE COMM IS NULL
WHERE comm is null
WHERE COMM IS Null✅(可行但不规范)
NVL() / NVL2()不区分函数名不区分大小写,参数内的逻辑遵循各自规则(列名不区分,字符串区分)。nvl(COMM, 0)
Nvl(comm, 0)
NVL(COMM, 0)
其他单行函数
(如SUBSTR()LENGTH()TRUNC()ROUND()等)
不区分函数名本身不区分大小写,推荐全大写保持风格统一。substr(ENAME, 1, 3)
SUBSTR(ENAME, 1, 3)
SubStr(ENAME, 1, 3)✅(可行但规范)
聚合函数
(如SUM()AVG()COUNT()MAX()MIN()
不区分函数名不区分大小写,推荐全大写count(*)
COUNT(*)
Count(*)

详细说明与示例

1.TO_CHAR()TO_DATE()的大小写规则

部分大小写规则正确示例错误示例
函数名不区分TO_CHARto_charTo_Char无(全接受)
日期格式符严格区分(必须大写)'YYYY-MM-DD HH24:MI:SS''yyyy-mm-dd hh24:mi:ss'
格式符中的文本不区分'"年"''"年"'均可

sql

-- ✅ 正确 SELECT TO_CHAR(HIREDATE, 'YYYY-MM-DD') FROM EMP; SELECT to_char(HIREDATE, 'YYYY-MM-DD') FROM EMP; -- ❌ 错误(格式符小写) SELECT TO_CHAR(HIREDATE, 'yyyy-mm-dd') FROM EMP; -- Oracle 报错:ORA-01821: 日期格式无法识别

2.NULL的大小写规则

NULL是 SQL 关键字,理论上不区分大小写,但强烈建议全大写以增强可读性。

sql

-- ✅ 均可执行,结果相同 SELECT * FROM EMP WHERE COMM IS NULL; SELECT * FROM EMP WHERE COMM IS null; SELECT * FROM EMP WHERE COMM IS Null; -- 以下写法虽能执行,但极不规范,避免使用 SELECT * FROM EMP WHERE COMM IS nUll;

最佳实践

sql

-- ✅ 推荐写法 WHERE COMM IS NULL WHERE COMM IS NOT NULL -- 配合 NVL 函数 SELECT NVL(COMM, 0) FROM EMP;

3.NVL()/NVL2()函数

sql

-- ✅ 以下写法均可 SELECT NVL(COMM, 0) FROM EMP; SELECT nvl(COMM, 0) FROM EMP; SELECT Nvl(comm, 0) FROM EMP; -- 推荐写法(统一大写) SELECT NVL(COMM, 0) AS 佣金 FROM EMP;

4. 其他常用函数速查

函数推荐写法可接受但不规范用途
SUBSTR()SUBSTR(ENAME, 1, 3)substr(ENAME, 1, 3)截取字符串
LENGTH()LENGTH(ENAME)length(ENAME)获取长度
TRUNC()TRUNC(SYSDATE)trunc(SYSDATE)截断日期
ROUND()ROUND(SAL, 0)round(SAL, 0)四舍五入
UPPER()UPPER(ENAME)upper(ENAME)转大写
LOWER()LOWER(ENAME)lower(ENAME)转小写

完整大小写规则汇总表

类别区分大小写?推荐写法说明
SQL 关键字(SELECT、WHERE)❌ 不区分全大写增强可读性
表名、列名(无引号)⚠️ 视数据库而定全大写Oracle 自动转大写,MySQL 视平台而定
表名、列名(有双引号)✅ 区分避免使用除非必须保留大小写或特殊字符
字符串值✅ 区分保持与存储一致'SMITH''smith'
日期格式符✅ 区分全大写'YYYY-MM-DD''yyyy-mm-dd'
函数名(TO_CHAR、NVL 等)❌ 不区分全大写保持风格统一
NULL❌ 不区分全大写标准写法
列别名(无引号)❌ 不区分按需命名会自动转大写(Oracle)
列别名(有双引号)✅ 区分按需命名保留大小写和空格

一句话补充总结

函数名(包括TO_CHARNVLSUBSTR等)和NULL关键字均不区分大小写,但日期格式符必须严格大写。


为保持代码规范和可读性,建议将所有关键字、函数名、格式符统一使用全大写。

http://www.jsqmd.com/news/692555/

相关文章:

  • 2026年收藏:5款论文降AI神器,可降AIGC率还享免费AI查重福利 - 降AI实验室
  • CES Asia 2026倒计时40天:展位几近告罄,最后冲刺谁能杀入赛道?
  • 哔哩下载姬DownKyi:5分钟搞定B站视频下载的终极免费方案
  • 给新手的NVIDIA显卡选购避坑指南:从GTX 1060到RTX 4060,看懂型号数字和字母后缀
  • 树结构,转换
  • AUTOSAR新手必看:ETAS ISOLAR里配置CAN模块,到底哪些项必须和EB Tresos保持一致?
  • 别再问端口不够用了!手把手教你调整Linux的net.ipv4.ip_local_port_range(附sysctl.conf永久生效方法)
  • 2026年3月最好的废水处理设备供应商推荐,水处理设备/废水处理设备,废水处理设备生产厂家哪家好 - 品牌推荐师
  • 深入理解3D数据集格式:从Nuscenes到KITTI的坐标系差异与统一实践
  • 告别复杂配置!用Auto.js的Java Socket在手机上5分钟搭建一个简易HTTP服务
  • 从PULSE到MAE:我的AI图像修复踩坑全记录(附Win10/Mac环境配置与百度云资源)
  • GetQzonehistory:一键备份你的QQ空间记忆,Python工具让数据永久保存
  • Claude Code 10 个隐藏技巧,90% 的人不知道!效率直接提升 300%
  • 5分钟极速上手:League Akari 智能工具包让您的英雄联盟体验焕然一新
  • 终极暗黑3按键助手:专业级游戏自动化宏配置完全指南
  • 2026年3月机床铸件直销厂家推荐,球墨铸件/铸铁平台/机床铸件,机床铸件实力厂家推荐 - 品牌推荐师
  • 如何高效部署tts-vue离线语音合成工具:3个关键配置方案解决实际应用问题
  • 20个真实世界机器学习案例解析与实战技巧
  • 别再手动建模块了!用SpringCloud多模块项目重构你的微服务(保姆级图文教程)
  • EasyExcel分批写入实战:规避.withTemplate陷阱,高效防OOM方案解析
  • 打造个性化Discord聊天机器人:角色扮演实战指南
  • 别再只读ADC值了!用STM32F103C8T6和土壤湿度传感器做个智能浇花系统(附完整代码)
  • 一文看懂:为什么说“理解+执行”是AI Agent工业化的分水岭
  • 用Python+Mediapipe做个AI跳绳教练:手势控制、自动校准,告别手动计数
  • RAGAs与G-Eval构建智能体评估体系实战
  • 从4G到5G的‘平滑升级’是真是假?一文拆解运营商选择NSA Option 3x背后的成本与运维困局
  • 用PyTorch逐行复现Transformer:从论文公式到可运行代码的保姆级解读
  • TypeScript类型体操:手把手教你用infer实现一个简易的‘类型提取’工具库
  • 时间序列建模避坑指南:你的AR模型真的‘平稳’吗?从统计性质反推参数设置
  • VSCode医疗数据校验速成课:3个插件+4类规则+1套CI/CD流程,今天就能上线合规校验