2010-06-02 38 views
0

我有一个包含计算列的视图。有没有办法将它转换为CHAR或VARCHAR而不是VARBINARY?很显然,我尝试使用CAST(...作为CHAR),但它给出了一个错误。在MySQL视图中投射计算列

这里是一个简单的可复制的例子。

CREATE VIEW view_example AS 
SELECT concat_ws('_', lpad(9, 3,'0'), lpad(1,3,'0'), date_format(now(),'%Y%m%d%H%i%S')) 
AS calculated_field_id; 

这是我的视图是如何创建的:

describe view_example; 
+---------------------+---------------+------+-----+---------+-------+ 
| Field    | Type   | Null | Key | Default | Extra | 
+---------------------+---------------+------+-----+---------+-------+ 
| calculated_field_id | varbinary(27) | YES |  | NULL |  | 
+---------------------+---------------+------+-----+---------+-------+ 

select version(); 
+-----------------------+ 
| version()    | 
+-----------------------+ 
| 5.0.51a-community-log | 
+-----------------------+ 

回答

0

CREATE VIEW view_example AS SELECT CAST( “” + CONCAT_WS( '_',LPAD(9,3, '0'),LPAD (1,3,'0'),date_format(now(),'%​​Y%m%d%H%i%S'))AS CHAR)AS calculated_field_id;

我不知道为什么。如果你离开演员阵容,它会变成双重的。 MySQL:笑一分钟。

+0

谢谢巴里。我从你的解决方案中删除了''“+',它对我很好。 (包含空的引号,我只得到返回的第一个字符。) CREATE VIEW view_example AS SELECT CAST(concat_ws('_',lpad(9,3,'0'),lpad(1,3,'0 '),date_format(now(),'%​​Y%m%d%H%i%S'))AS CHAR)AS calculated_field_id; – 2010-06-03 03:06:57

+0

奇怪。我以为你说CAST给了你一个错误。我认为添加空字符串可能会消除该错误。 – barrycarter 2010-06-03 13:56:53

+0

它看起来像CAST给出了一个错误,因为我使用CAST(... AS VARCHAR) - 事实证明我需要CAST(... AS CHAR)。恰巧它将该字段定义为VARCHAR。 – 2010-06-03 23:50:58