sql数据列属性char转换为int时提示转换失败,求解。

默罕默德_z 2018-11-06 05:06:08

要转换如图4列数据类型char为int时一直提示转换失败,如下:
...全文
302 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoxiangqing 2018-11-08
  • 打赏
  • 举报
回复
转换需要有条件的,就是需要全部是数字才行
默罕默德_z 2018-11-07
  • 打赏
  • 举报
回复
引用 12 楼 yenange 的回复:


USE tempdb
GO
IF OBJECT_ID('t') IS NOT NULL DROP TABLE t
GO
CREATE TABLE t(
time1 CHAR(100)
)
GO
INSERT INTO t (time1) VALUES ('256')
GO
IF OBJECT_ID('dbo.Fun_String2ASCII') IS NOT NULL
DROP FUNCTION dbo.Fun_String2ASCII
GO
-- =============================================
-- Author: yenange
-- Create date: 2018-06-07
-- Description: 将字符串中的所有字符转换为ASCII码,并用逗号连接
-- =============================================
CREATE FUNCTION dbo.Fun_String2ASCII
(
@str NVARCHAR(MAX)
)
RETURNS NVARCHAR(MAX)
AS
BEGIN
DECLARE @r NVARCHAR(MAX),@s NCHAR(1)

IF ISNULL(@str,'')=''
RETURN @r;

SET @r=''

WHILE LEN(@str)>0
BEGIN
SET @s=LEFT(@str,1);
SET @str=SUBSTRING(@str,2,LEN(@str)-1);

SET @r=@r+RTRIM(ASCII(@s))+',';
END

SET @r=SUBSTRING(@r,1,LEN(@r)-1)

RETURN @r
END
GO

--查一下 ascii 码
SELECT time1,dbo.Fun_String2ASCII(time1) AS asciiCode
FROM t


给个函数给你, 如果有不能转换的看这个就清楚了
嗯嗯,感谢,昨晚已解决,你这个我也尝试下其他类型,感谢。
吉普赛的歌 版主 2018-11-06
  • 打赏
  • 举报
回复


USE tempdb
GO
IF OBJECT_ID('t') IS NOT NULL DROP TABLE t
GO
CREATE TABLE t(
	time1 CHAR(100)	
)
GO
INSERT INTO t (time1) VALUES ('256')
GO
IF OBJECT_ID('dbo.Fun_String2ASCII') IS NOT NULL
	DROP FUNCTION dbo.Fun_String2ASCII
GO
-- =============================================
-- Author:		yenange
-- Create date: 2018-06-07
-- Description:	将字符串中的所有字符转换为ASCII码,并用逗号连接
-- =============================================
CREATE FUNCTION dbo.Fun_String2ASCII
(
	@str NVARCHAR(MAX)
)
RETURNS NVARCHAR(MAX)
AS
BEGIN
	DECLARE @r NVARCHAR(MAX),@s NCHAR(1)
	
	IF ISNULL(@str,'')=''
		RETURN @r;
	
	SET @r=''
	
	WHILE LEN(@str)>0
	BEGIN
		SET @s=LEFT(@str,1);
		SET @str=SUBSTRING(@str,2,LEN(@str)-1);
		
		SET @r=@r+RTRIM(ASCII(@s))+','; 
	END
 
	SET @r=SUBSTRING(@r,1,LEN(@r)-1)
 
	RETURN @r
END
GO

--查一下 ascii 码
SELECT time1,dbo.Fun_String2ASCII(time1) AS asciiCode
FROM t
给个函数给你, 如果有不能转换的看这个就清楚了
默罕默德_z 2018-11-06
  • 打赏
  • 举报
回复
我去,表太大,常规手段没法打开,确实是里面有个错误值,不是int类型,导致不能转。我去。感谢各位。
RINK_1 2018-11-06
  • 打赏
  • 举报
回复
引用 8 楼 RINK_1 的回复:
对的,#5版主的说法是对的。CHAR类型的数据,如果不足指定的长度,那就会补空字符,你这是100位的CHAR,一般的数字后面都不知道补了多少空字符了。
说错了,是空格。
二月十六 版主 2018-11-06
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([col] CHAR(100))
Insert #T
select N'同频切换出执行请求次数 '
Go
--测试数据结束
Select CONVERT(INT,col) from #T


RINK_1 2018-11-06
  • 打赏
  • 举报
回复
对的,#5版主的说法是对的。CHAR类型的数据,如果不足指定的长度,那就会补空字符,你这是100位的CHAR,一般的数字后面都不知道补了多少空字符了。
二月十六 版主 2018-11-06
  • 打赏
  • 举报
回复
数据不是可以转换的数据,是
同频切换出执行请求次数                              

这么一个字符串加空格,所以无法转换成整形
默罕默德_z 2018-11-06
  • 打赏
  • 举报
回复
引用 5 楼 wmxcn2000 的回复:
值 后面那一长串,就是你现在存的内空,所以转换失败了。
意思是村NUL值就会转失败?不会吧?我这里面都是数字,意思是我这内容有错的么?
卖水果的net 版主 2018-11-06
  • 打赏
  • 举报
回复
值 后面那一长串,就是你现在存的内空,所以转换失败了。
默罕默德_z 2018-11-06
  • 打赏
  • 举报
回复
引用 3 楼 RINK_1 的回复:
估计该字段原来已经存在的数据不是整数。
是整数,转为float也是失败。
RINK_1 2018-11-06
  • 打赏
  • 举报
回复
估计该字段原来已经存在的数据不是整数。
默罕默德_z 2018-11-06
  • 打赏
  • 举报
回复
转了半天,心态已崩,求解。
默罕默德_z 2018-11-06
  • 打赏
  • 举报
回复

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧