Mysql 将int转换为与concat()一起使用
我写了以下sql语句:Mysql 将int转换为与concat()一起使用,mysql,sql,concat,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
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
是一个整数,因此输出只是一堆十六进制数。我尝试过很多方法,比如cast-an将id转换为字符串,cast(id为varchar)
,但都没有效果。我仍然收到这个错误消息
错误:您的SQL语法有错误;检查手册
对应于您的MySQL服务器版本,以便使用正确的语法
在“varchar”附近,有一个字母“abfid”和“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);')
更新
问题解决了。我必须使用
cast(无论作为char什么)
而不是cast(无论作为varchar什么)
使用CONVERT函数,我认为这将解决您的问题您根本不需要转换或强制转换(而且您应该使用cast(无论作为char什么)
而不是varchar
)
您缺少“
关于eindeutige Kombination aus abfid and parentid的信息,或者您的insert语句不起作用:
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
注:这是一份声明
结果的类型可以是以下值之一:
- 二进制[(N)]
- 字符[(N)]
- 日期
- 日期时间
- 十进制[(M[,D])]
- 有符号[整数]
- 时间
- 无符号[整数]
证明:
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)
注意:这里可以看到,在name
列中,idx_1
周围也缺少引号。您到底想做什么?我试图用concat创建一个insert语句,concat只接受字符串变量,所以主要问题是将id从int转换为string,以便在这个concat语句中使用它mysql中的.CONCAT可以使用整数作为参数。CONCAT(1,2)
将给出12
我知道……这是我的问题。我尝试了这个SELECT CONCAT('INSERT INTO dev_sys_index(name,tableid,description)值(idx','asd',','1',eindeutige Kombination aus abfid and parentid);'))
并且它可以工作……我尝试了许多类似转换的方法(VARCHAR,id)但没有任何效果。我在互联网上搜索了很长时间;'是一个字符串。当我删除id并将字符串变量放在那里时,它起作用了…所以我与此无关。我知道错误消息看起来像是问题所在,但它不是。但你是对的。我应该使用cast(作为char的任意内容)而不是cast(作为varchar的任意内容)这就是问题所在。谢谢!@kai No,你混淆了concat函数中的一些逗号和单引号。正确设置代码格式,这种情况不太可能发生。我尝试了你的查询并进行了调整,效果很好。无需强制转换或转换。请查看我的编辑…对我来说,如果我转换整型,它在没有你的引号的情况下工作!如果我不转换整型convert也会执行,但我只得到hexNumber。是的,CONCAT()可以工作,但是insert语句不能!这就是我要告诉你的。