当前位置:网站首页>SQL中方括号的用途
SQL中方括号的用途
2022-07-19 16:16:00 【夜流冰】
在SQL语句中,会使用方括号: [ ]
那么,以下两种方式有啥区别:
SELECT [FirstName] FROM [Contacts]
SELECT FirstName FROM Contacts
包围对象和字段名 Around Object and Field Names
简单地说,方括号被用来转义关键字、保留字或特殊字符。
最常见的是,当人们在给对象和字段命名时使用空格时,我们看到需要使用方括号。 检查一下上面的原始例子,因为没有特殊字符,而且没有一个名字是保留字,所以并不真正需要包括方括号。
也就是说,如果他们不是将字段命名为FirstName,而是将其命名为First Name,那么在字段名周围的方括号就成为必须的。
你可以用方括号来括住名字。如果名称不包含任何空格或特殊字符(如标点符号),方括号是可选的。如果名称中含有空格或特殊字符,你必须使用方括号。
提示:当你设计表格和报告时,包含空格的名称更容易阅读,可以节省你的时间,但最终可能使你在编写SQL语句时输入更多的内容。当你为数据库中的对象命名时,你应该考虑到这一点。
使用方括号有坏处么?
简短的回答,没有。 包括括号没有真正的坏处,即使不是严格必要的。
你会看到许多有经验的开发者使用它们来确保永远不会有任何问题。
例1:
我们看一下在一个表单中寻找第一个匹配项的代码
Sub FrmRequery(frm As Form, sSearchField As String, sSearchTerm As String)
Dim rs As DAO.Recordset
Set rs = frm.RecordsetClone
rs.FindFirst sSearchField & "='" & sSearchTerm & "'"
frm.Bookmark = rs.Bookmark
Set rs = Nothing
End Sub
像下面的代码会更好些:
Sub FrmRequery(frm As Form, sSearchField As String, sSearchTerm As String)
Dim rs As DAO.Recordset
Set rs = frm.RecordsetClone
rs.FindFirst "[" & sSearchField & "]='" & sSearchTerm & "'"
frm.Bookmark = rs.Bookmark
Set rs = Nothing
End Sub
因为第二个将接受任何字段名,而第一个在传递字段名中含有空格或其他特殊字符时将出错。
当编码时,总是假设最坏的情况;一些额外的括号保证你的代码不会被破坏,并能处理任何传给他的数据。
例2:
我们使用脚本创建一个表:
CREATE TABLE Date
(
Id AUTOINCREMENT PRIMARY KEY,
Date DATETIME
);
可能会报错:
Syntax error in CREATE Table statement.
Syntax error in field definition.
为什么? 因为表的名字和字段都是用了保留字“Date”。 因此,如果我们真的想创建这样一个表,这时就会使用方括号,可以这样做:
CREATE TABLE [Date]
(
Id AUTOINCREMENT PRIMARY KEY,
[Date] DATETIME
);
例3:
与前面的例子类似,让我们尝试创建一个名为 "Corporate Contacts"的表,有以下字段。Id, First Name, Last Name, Title, Is Active, Date Created. 如下所示:
CREATE TABLE Corporate Contacts
(
Id AUTOINCREMENT PRIMARY KEY,
First Name CHAR,
Last Name CHAR,
Title CHAR,
Is Active BIT,
Date DATETIME
);
但这将再次失败,由于使用了特殊字符(空格)和保留字,就需要加方括号。 因此,正确的语法应该是:
CREATE TABLE [Corporate Contacts]
(
Id AUTOINCREMENT PRIMARY KEY,
[First Name] CHAR,
[Last Name] CHAR,
Title CHAR,
[Is Active] BIT,
[Date] DATETIME
);
但更好的方法是不使用特殊字符和保留字:
CREATE TABLE CorporateContacts
(
ContactId AUTOINCREMENT PRIMARY KEY,
FirstName CHAR,
LastName CHAR,
Title CHAR,
IsActive BIT,
CreationDate DATETIME
);
总结
现在,从这个讨论中应该有两个主要的收获。
在应用程序中命名任何东西时,不要使用特殊字符(记住,在命名时,空格是不好的!)或保留字!这是所有开发人员的最佳做法。这对任何开发人员来说都是一个最佳实践。
当编写SQL语句和VBA代码时,最好谨慎行事,当你不能控制对象、字段的名称时,就加上括号。
注意:
在SQL Server和MS Access中,方括号在查询过滤器中使用时有特殊含义。方括号用于指定一个字符集或字符范围,如"[A-Z]"可以匹配从'A'到'Z'的任何单个字符。为了明确地匹配方括号,方括号符号必须与字符集中的左括号一起使用,如"[[]"。例如,如果查询的目的是寻找包含精确字符串 "fore [TAG] aft "的字段,则使用 "fore [[]TAG] aft"。注意,右方括号不需要任何特殊处理。
参考:
SQL Statements, To Square Bracket Or Not? | DEVelopers HUT
Using square brackets in query filters on SQL Server and MS Access
边栏推荐
猜你喜欢
百万级要素优化:基于PG与PostGIS的实时矢量瓦片服务
Solution of webdriver click login failure
After resetting the computer, install MySQL 5.7.38 and msvcp120 is missing dll
UniPro多端部署 满足客户多样化需求
MTK 如何更换开机 LOGO?
项目经验总结——送给测试岗做项目的朋友们
The concept and main functions of serial server
关于收发邮件中的一些概念解释(收件人 抄送人 密送人 回复 回复全部)
Explanation of some concepts in sending and receiving e-mails (CC of the addressee, BCC of the addressee, reply to all)
FreeRTOS个人笔记-支持时间片
随机推荐
离线底图瓦片,可用于Cesium加载使用
MathWorks 入驻中国 15 年,持续创新的秘诀有哪些?
docker配置mysql,redis
如何做好安全开发?
Dart 变量默认值
【推荐阅读】超有用的漏洞扫描工具合集!
跟着苹果不赚钱,2万亿“果链”弃“果”拥“特”
2022年理财产品都有哪些种类?适合新手的是哪个?
Overview of lorawan protocol
Cerebral Cortex:老年人生活方式与脑功能连接的关系及其与认知能力下降的联系
Oracle 19c迁移遇到大容量lob表怎么办?
What are the technical characteristics of Lora?
一起读源码之ThreadLocal
安装homebrew、nvm、verdaccio搭建私有npm仓库
常见的跨域场景
kubernates-1.24.2 (最新版) + containerd + nexus 尝鲜
Why is the pay gap between testers and test engineers so large? Three minutes, you get it all
webdriver点击登录失效问题的解决
Solution of webdriver click login failure
Create the concept of "privacy technology" 360 digital technology helps maintain industry data security