sqlserver什么时候用中括号来定义字段名?

一般来讲,sqlserver中,字段名的命名是没有限制的,但在调用的时候,为了能够筛选字段,则有时候我们需要加上中括号或者引号

例如

declare @t table(id int,[select] bit,[1] int,date date,[税率%] money)

类似 select、delete等sqlserver关键字是不能直接定义的,如果非要用这些关键字,那么就需要使用中括号来定义了

数字开头,不符合命名规范,也是不能直接定义的,但是通过中括号,还是可以这么用

然后就是特殊符号啦,空格啦,也可以使用中括号来定义为字段名

除了定义时需要用到中括号来定义特殊字段名,筛选时也一样

select [税率%] from @t where [select]=0

除了这些固定定义外,其实更常见的地方在于行列转换中,pivot和unpivot中

DECLARE @T1 TABLE (PersonName VARCHAR(100),YearMonth int,Amount decimal(19,9))
INSERT INTO @T1
SELECT '张三','201901','6000' UNION ALL
SELECT '李四','201901','5000' UNION ALL
 
SELECT '张三','201902','6000' UNION ALL
SELECT '李四','201902','5000' UNION ALL
SELECT '王五','201902','7000' UNION ALL
 
SELECT '张三','201903','8000' UNION ALL
SELECT '李四','201903','5000' UNION ALL
SELECT '王五','201903','7500' UNION ALL
 
SELECT '张三','201904','8500' UNION ALL
SELECT '李四','201904','5000' UNION ALL
SELECT '王五','201904','7500' UNION ALL
 
SELECT '张三','201906','9500' UNION ALL
SELECT '李四','201906','5000' UNION ALL
SELECT '王五','201906','7500' 

select * from @t1
pivot(max(amount) for yearmonth in ([201901],[201902],[201903],[201904],[201905],[201906])) p

在YearMonth列中,值可以是任意类型,但在行转列时,如果要以YearMonth的值作为字段名,那么就需要加上中括号来定义了,因为命名规则规定,变量名不能以数字开头

当然,如果值中间出现了中括号,或者字段名中间出现了中括号,我们还是有办法补救的,用双引号来代替

declare @t table(id int,[select] bit,[1] int,date date,[税率%] money,"字段名里出现了中括号 [我就随便看看]" money)

但如果。。。。你非要在字段名里同时出现双引号和中括号。。。。那我只能说,你的命名实在太另类了。。。。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文盲老顾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值