我有以下声明:
CREATE TABLE `test` SELECT * FROM (SELECT
'Placeholder' AS 'dynamic_1'
FROM
answer) AS test
结果表test
有一列dynamic_1
,即varchar(11)
第一个问题是 - 为什么要将列的固定长度设置为11?
第二个问题是 - 在这种情况下,我希望结果列dynamic_1
是TEXT类型而不是varchar(),我该如何实现呢?
答案 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 | |
+--------+------+------+-----+---------+-------+