在将 varchar 值 '1,2' 转换成数据类型 int 时失败。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在将 varchar 值 '1,2' 转换成数据类型 int 时失败。相关的知识,希望对你有一定的参考价值。

select username from sq_user where uid in (select friends from sq_friend where username='ceshi')
怎么解决?
在线等
friend字段是varchar类型 内容是1,2

我好像又碰到 ceshi,估计我上一个回答是不是同一个人。取相互关注列表的。在我之前回的两个都写得不好。你用这个吧。
SELECT UserName
FROM dbo.sq_user AS U WITH(NOLOCK)
INNER JOIN dbo.sq_friend AS F WITH(NOLOCK)
ON U.uid = CONVERT(INT, F.friends)

WHERE F.UserName = 'ceshi'
参考技术A select username from sq_user
where (select ',' + friends + ',' from sq_friend where username='ceshi') LIKE '%,' + uid + ',%'追问

在将 varchar 值 '%,' 转换成数据类型 int 时失败。

追答

select username from sq_user
where
(select ',' + friends + ',' from sq_friend where username='ceshi') LIKE '%,' + cast (uid as varchar(20)) + ',%'

本回答被提问者和网友采纳
参考技术B 使用like 来写,ORACLE写法
select username from sq_user where (select friends from sq_friend where username='ceshi') like '%'||uid||‘%’;追问

'|' 附近有语法错误。

追答

SQL SERVER的数据库?

追问

嗯嗯

追答

select username from sq_user where (select friends from sq_friend where username='ceshi') like '%'+cast (uid as varchar(20))+‘%’;

追问

但是最后的百分号的引号是错的 输入法不对 改成英文的就好了 哈哈

SQL:在将 varchar 值 '' 转换成数据类型 int 时失败。

SELECT S.memberName
FROM Student as S, Movable as M
WHERE
S.memberID in (SELECT L.memberID
FROM Loan as L
WHERE L.itemNo in (SELECT C.itemNo
FROM Category as C
WHERE C.itemName = 'Camera')) AND M.model='SQ-29';
代码如上,着实不知道怎么改,求提拔

SQL语句中的值跟数据库表中字段的数据类型不匹配。

要是转为varchar是可以转回来的,但是转为了char类型,所以就转不回来了,因为char类型有个长度,不足这个长度的会用空格填充,所以一个数字多了很多个空格后就不是合法的数值格式了。

结果再 用相同语句想把类型转回smallint,就报错在将 varchar 值 '*' 转换成数据类型 int 时失败,注意 :字符varchar转数据类型int和数据类型int转字符vachar的语句是不同的。

varchar特点:

1、使用比固定长度类型(char)占用更少存储空间(除了使用ROW_FORMAT=FIXED创建的MyISAM表)。

2、使用额外的1-2字节来存储值长度,列长度<=255使用1字节保存,其它情况使用2字节保存。例如varchar(10)会占用11字节存储空间,varchar(500)会占用502字节存储空间。

3、节约空间,所以性能会有帮助。在更新的时候会产生额外的工作。

4、5.0以上版本,取值或设置值都会保存字符串末尾的空格,4.1之前的版本都会把字符串末尾的空格删除掉。

5、最大长度远大于平均长度,很少发生更新的时候适合使用varchar,因为碎片更少了。

以上内容参考:百度百科-varchar

参考技术A 你要是转为varchar应该是可以转回来的,但是你是将他转为了char类型,所以就转不回来了,因为char类型有个长度,不足这个长度的会用空格填充,所以一个数字多了很多个空格后就不是合法的数值格式了。 参考技术B 先不说你这个报错,单是你这个语句里,S和M两个表的关系在哪里?靠什么关联?
你这个报错大概是因为那几个in的类型不一致,你检查下S.memberID、L.memberID 还有L.itemNo和C.itemNo的字段类型是不是一样?追问

多谢提醒,刚刚看了下发现要把S和M链起来实在太麻烦,干脆重新建了一个表,那个问题已经修复了,我把数据改为了纯int。。。虽然我依然很疑惑我没有任何一个int的数据但是为什么会这样。。

追答

这个也有可能是数据引起的,看不到数据不太容易判断

本回答被提问者和网友采纳
参考技术C 各种嵌套233,厉害了,
他报这个错,当然是你类型问题啦,
你把不是纯数字的让int查询。追问

emmmm我不太懂我哪里让int查询了

追答

S.memberID L.itemNo C.itemName M.model这几个里面你看看

追问

好的谢谢

以上是关于在将 varchar 值 '1,2' 转换成数据类型 int 时失败。的主要内容,如果未能解决你的问题,请参考以下文章

在将 varchar 值 'xiaoming' 转换成数据类型 int 时失败。

SQL:在将 varchar 值 '' 转换成数据类型 int 时失败。

SQL数据库里面显示在将 varchar 值 'S' 转换成数据类型 int 时失败。 下面是存储过程 麻烦看下 是否有错

SQL用交叉报表时报错:在将 varchar 值 'then result else 0 end)' 转换成数据类型 int 时失败。

500 : 服务器错误DataTableSQL Error: 在将 varchar 值 'A03' 转换成数据类型 int 时失败。啥问题?

在Sql中将 varchar 值 '1,2,3,4,5,6' 转换成数据类型 int