在MySql中创建具有特定类型的虚拟列

时间:2016-02-24 13:56:50

标签: mysql

我有以下声明:

 CREATE TABLE `test` SELECT * FROM (SELECT
                'Placeholder' AS 'dynamic_1'
            FROM
                answer) AS test

结果表test有一列dynamic_1,即varchar(11)

第一个问题是 - 为什么要将列的固定长度设置为11?

第二个问题是 - 在这种情况下,我希望结果列dynamic_1是TEXT类型而不是varchar(),我该如何实现呢?

2 个答案:

答案 0 :(得分:0)

  

第一个问题是 - 为什么要将列的固定长度设置为11?

因为'占位符'使用11个字符因此它使它成为varchar(11)

  

第二个问题是 - 在这种情况下,我希望生成的列dynamic_1为TEXT类型而不是varchar(),我该如何实现?

您可以尝试使用CAST运算符来实现它。或者更好(正如大卫指出的那样)你可以用你需要的有效数据类型创建一个表。

答案 1 :(得分:0)

我只知道这个,因为我阅读了手册。我知道......作弊,对吧?

SELECT * FROM my_table;
+--------+--------+------------+------------+
| emp_no | salary | from_date  | to_date    |
+--------+--------+------------+------------+
|  10001 |  60117 | 1986-06-26 | 1987-06-26 |
|  10001 |  62102 | 1987-06-26 | 1988-06-25 |
|  10001 |  66074 | 1988-06-25 | 1989-06-25 |
|  10001 |  84917 | 1999-06-23 | 2000-06-22 |
|  10001 |  85112 | 2000-06-22 | 2001-06-22 |
|  10001 |  85097 | 2001-06-22 | 2002-06-22 |
|  10001 |  88958 | 2002-06-22 | 9999-01-01 |
|  10002 |  65828 | 1996-08-03 | 1997-08-03 |
|  10002 |  65909 | 1997-08-03 | 1998-08-03 |
|  10002 |  67534 | 1998-08-03 | 1999-08-03 |
|  10002 |  69366 | 1999-08-03 | 2000-08-02 |
|  10002 |  71963 | 2000-08-02 | 2001-08-02 |
|  10002 |  72527 | 2001-08-02 | 9999-01-01 |
+--------+--------+------------+------------+

CREATE TABLE my_new_table(emp_no TEXT NOT NULL) SELECT emp_no FROM my_table;

SELECT * FROM my_new_table;
+--------+
| emp_no |
+--------+
| 10001  |
| 10001  |
| 10001  |
| 10001  |
| 10001  |
| 10001  |
| 10001  |
| 10002  |
| 10002  |
| 10002  |
| 10002  |
| 10002  |
| 10002  |
+--------+

DESCRIBE my_new_table;
+--------+------+------+-----+---------+-------+
| Field  | Type | Null | Key | Default | Extra |
+--------+------+------+-----+---------+-------+
| emp_no | text | NO   |     | NULL    |       |
+--------+------+------+-----+---------+-------+