将int转换为与concat()一起使用

时间:2014-01-09 14:04:07

标签: mysql sql concat

我写了这个sql语句:

SELECT concat(
            'INSERT INTO dev_sys_index (name,tableid,descrition) VALUES (idx_',
            name,
            ',',
            id,
            ',eindeutige Kombination aus abfid und parentid);') 
    FROM dev_sys_tables 
    WHERE datenmodell=350 

但是输出只是一个十六进制数的墙,因为id是一个整数。我已经尝试了很多东西,比如强制转换将id转换为字符串CAST( id as varchar)。但是没有任何效果。我仍然收到此错误消息。

  

错误:您的SQL语法出错;检查手册   对应于您的MySQL服务器版本,以便使用正确的语法   靠近'varchar),',eindeutige Kombination aus abfid und parentid);'

任何帮助都会被批准!

工作正常:

concat(
    'INSERT INTO dev_sys_index (name,tableid,descrition) VALUES (idx_',
    name,
    ',',
    cast(id as char),
    ',eindeutige Kombination aus abfid und parentid);') 

只获得六分之一的墙:

concat(
    'INSERT INTO dev_sys_index (name,tableid,descrition) VALUES (idx_',
    name,
    ',',
    id,
    ',eindeutige Kombination aus abfid und parentid);')

UPDATE 问题解决了。我必须使用cast(whatever as char)代替cast(whatever as varchar)

2 个答案:

答案 0 :(得分:1)

您根本不需要转换或转换(无论如何,您应该使用cast(whatever as char)而不是varchar)。

您在"附近缺少eindeutige Kombination aus abfid und parentid,否则您的插入语句将无效:

SELECT concat('INSERT INTO dev_sys_index (name,tableid,descrition) VALUES (idx_',name,',',id,',"eindeutige Kombination aus abfid und parentid");') 
FROM dev_sys_tables 
WHERE datenmodell=350 

P.S。:这是陈述

manual entry
  

结果的类型可以是以下值之一:

     
      
  • BINARY [(N)]
  •   
  • CHAR [(N)]
  •   
  • DATE
  •   
  • DATETIME
  •   
  • DECIMAL [(M [,d)]
  •   
  • 签名[INTEGER]
  •   
  • TIME
  •   
  • UNSIGNED [INTEGER]
  •   

证明:

mysql> select id, id from tasks;
+------+------+
| id   | id   |
+------+------+
|    1 |    1 |
|    2 |    2 |
|    3 |    3 |
+------+------+
3 rows in set (0.00 sec)

mysql> SELECT concat('INSERT INTO dev_sys_index (name,tableid,descrition) VALUES (idx_',id,',',id,',"eindeutige Kombination aus abfid und parentid");') from tasks;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| concat('INSERT INTO dev_sys_index (name,tableid,descrition) VALUES (idx_',id,',',id,',"eindeutige Kombination aus abfid und parentid");') |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| INSERT INTO dev_sys_index (name,tableid,descrition) VALUES (idx_1,1,"eindeutige Kombination aus abfid und parentid");                     |
| INSERT INTO dev_sys_index (name,tableid,descrition) VALUES (idx_2,2,"eindeutige Kombination aus abfid und parentid");                     |
| INSERT INTO dev_sys_index (name,tableid,descrition) VALUES (idx_3,3,"eindeutige Kombination aus abfid und parentid");                     |
+-------------------------------------------------------------------------------------------------------------------------------------------+
3 rows in set (0.00 sec)

P.S。:在这里可以看到,idx_1列中name周围的引号也丢失了。

答案 1 :(得分:0)

使用CONVERT函数,我认为这将解决您的情况