对于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)
对于生成测试数据来说还是非常好用的。