探究:SQL server和MySQL对变量使用select之不同;MySQL产生序列的有趣方式

对于SQL server来说,变量的赋值可以通过set或者select实现,可以通过select查看变量的内容:

declare @a int
select @a=1
print @a
set @a=2
print @a

结果:
1
2

Mysql中select同样可以完成变量的赋值和查看,与SQL server不同的是,1、变量赋值的时候是显示变量内容的:2、可以直接进行比较

如下:

mysql> select @a :=2;
+--------+
| @a :=2 |
+--------+
|      2 |
+--------+
1 row in set (0.00 sec)

mysql> select @a=1;
+------+
| @a=1 |
+------+
|    0 |
+------+
1 row in set (0.00 sec)
mysql> select @a;
+------+
| @a   |
+------+
|    2 |
+------+
1 row in set (0.00 sec)

赋值的时候返回数据,这个特性很有意思,可以让我们用来制造需要的序列:

获取2018年到2020年的每月开始日期和结束日期

mysql> select @firstdate firstdate,
    ->        @lastdate:=date_add(@firstdate,INTERVAL 1 MONTH)- INTERVAL 1 DAY lastdate,
    ->        @firstdate:=@lastdate+ interval 1 day 
    -> from 
    -> (select @firstdate :=CAST('2018-01-01' AS date)) t1,information_schema.COLUMNS 
    -> WHERE @firstdate<cast('2021-1-1' as date);
+------------+------------+---------------------------------------+
| firstdate  | lastdate   | @firstdate:=@lastdate+ interval 1 day |
+------------+------------+---------------------------------------+
| 2018-01-01 | 2018-01-31 | 2018-02-01                            |
| 2018-02-01 | 2018-02-28 | 2018-03-01                            |
| 2018-03-01 | 2018-03-31 | 2018-04-01                            |
| 2018-04-01 | 2018-04-30 | 2018-05-01                            |
| 2018-05-01 | 2018-05-31 | 2018-06-01                            |
| 2018-06-01 | 2018-06-30 | 2018-07-01                            |
| 2018-07-01 | 2018-07-31 | 2018-08-01                            |
| 2018-08-01 | 2018-08-31 | 2018-09-01                            |
| 2018-09-01 | 2018-09-30 | 2018-10-01                            |
| 2018-10-01 | 2018-10-31 | 2018-11-01                            |
| 2018-11-01 | 2018-11-30 | 2018-12-01                            |
| 2018-12-01 | 2018-12-31 | 2019-01-01                            |
| 2019-01-01 | 2019-01-31 | 2019-02-01                            |
| 2019-02-01 | 2019-02-28 | 2019-03-01                            |
| 2019-03-01 | 2019-03-31 | 2019-04-01                            |
| 2019-04-01 | 2019-04-30 | 2019-05-01                            |
| 2019-05-01 | 2019-05-31 | 2019-06-01                            |
| 2019-06-01 | 2019-06-30 | 2019-07-01                            |
| 2019-07-01 | 2019-07-31 | 2019-08-01                            |
| 2019-08-01 | 2019-08-31 | 2019-09-01                            |
| 2019-09-01 | 2019-09-30 | 2019-10-01                            |
| 2019-10-01 | 2019-10-31 | 2019-11-01                            |
| 2019-11-01 | 2019-11-30 | 2019-12-01                            |
| 2019-12-01 | 2019-12-31 | 2020-01-01                            |
| 2020-01-01 | 2020-01-31 | 2020-02-01                            |
| 2020-02-01 | 2020-02-29 | 2020-03-01                            |
| 2020-03-01 | 2020-03-31 | 2020-04-01                            |
| 2020-04-01 | 2020-04-30 | 2020-05-01                            |
| 2020-05-01 | 2020-05-31 | 2020-06-01                            |
| 2020-06-01 | 2020-06-30 | 2020-07-01                            |
| 2020-07-01 | 2020-07-31 | 2020-08-01                            |
| 2020-08-01 | 2020-08-31 | 2020-09-01                            |
| 2020-09-01 | 2020-09-30 | 2020-10-01                            |
| 2020-10-01 | 2020-10-31 | 2020-11-01                            |
| 2020-11-01 | 2020-11-30 | 2020-12-01                            |
| 2020-12-01 | 2020-12-31 | 2021-01-01                            |
+------------+------------+---------------------------------------+
36 rows in set (0.05 sec)

对于生成测试数据来说还是非常好用的。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值