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; (表定义时为 Emp SELECT * 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 NULLWHERE comm is nullWHERE 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 关键字均不区分大小写,但日期格式符必须严格大写。


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

相关推荐
不剪发的Tony老师2 小时前
DBcooper:一款面向开发者的现代数据库客户端
数据库·sql
你觉得脆皮鸡好吃吗4 小时前
SQL注入 基础防御
数据库·sql
2301_800976934 小时前
数据库的基本操作
数据库·sql·oracle
@小柯555m6 小时前
MySql(基础操作符--查找除复旦大学的用户信息)
数据库·sql·mysql
其实防守也摸鱼8 小时前
面试常问问题总结--渗透测试工程师方向
网络·sql·面试·职场和发展·xss·工具·owasp
阿里巴巴首席技术官8 小时前
SQL日志显示优化原创分享
数据库·sql
cyber_两只龙宝8 小时前
【Oracle】Oracle数据库的登录验证
linux·运维·数据库·sql·云原生·oracle
大龄码农-涵哥9 小时前
MySQL SQL调优详解:explain执行计划、索引失效、慢查询优化一条龙
数据库·sql·mysql
陈皮糖..21 小时前
27 届运维实习笔记|第三、四周:从流程熟练到故障排查,企业运维实战深化
运维·笔记·sql·nginx·ci/cd·云计算·jenkins