将 varchar 值 '10.04' 转换为数据类型为 int 的列时发生语法错误。

将 varchar 值 '10.04' 转换为数据类型为 int 的列时发生语法错误。,第1张

vchar存的是字符string类型的数据,int形是整形,类型转换的话,小数部分会被舍弃,看你创建的数据库是为公司做的吧,建议不要转成int型,会让公司受损失的,可以用decimal类型存储,这个类型可以指定固定的小数,用来存储金额等准确数据。如果精度要求较高,建议使用float类型

如果试图进行不可能的转换(例如,将含有字母的

char

表达式转换为

int

类型),SQL

Server

将显示一条错误信息。

含了“,”

SQL认为是字母,给出了错误信息

如需要使用该查询,可以将articles

字段内的非数字和+-号的符号都删除

/

    存储过程的return只能返回int类型的数据,并且只这样接收返回值的

    declare @A int

    Exec @A=P_判断是否闰年

    select @A 

/

--你可以改成这样

alter proc P_判断是否闰年  

as

begin

   declare @时间 int

   set @时间= datepart(year,'2000-02-01')

  select  CASE WHEN(@时间 % 4 = 0 AND @时间 % 100 <> 0) or (@时间 % 400 = 0)then '是闰年'

        else  '不是闰年'

   end

end

--也可以这样

alter proc P_判断是否闰年  (@Rst Varchar(10) output)

as

begin

   declare @时间 int

   set @时间= datepart(year,'2000-02-01')

  Set @Rst= CASE WHEN(@时间 % 4 = 0 AND @时间 % 100 <> 0) or (@时间 % 400 = 0)then '是闰年'

        else  '不是闰年'

   end

   

end

/

declare @A varchar(10)

Exec  P_判断是否闰年 @A output

select @A

/

varchar如果是123这类数字的话,会自动隐式转换为int,不能转换就像你的错误提示,数字含有字符跟字母,当然就转换不了了,把你的语句改成where

id='"

+

ID+"'"

把int转换成varchar就不会报错了

你的思路是对的,必须保证字段里全部是数字才可以修改

例:表table2中的列id为int型,现改为varchar 型

alter table table2 alter column id varchar

如果要修改整个数据库的类型,可以用下面的语句

例子:把整个数据库的varchar 类型转换为nvarchar(放在查询分析器里执行)

declare @sql nvarchar(4000)

set @sql=''

select @sql=@sql+'alter table '+aname+' alter column '+bname +' nvarchar('+left(blength,99)+')'+char(13)

from

sysobjects a inner join syscolumns b on aid=bid inner join systypes c on bxusertype=cxusertype

where axtype='U' and cname='varchar' --and name >= ''

order by bname

print @sql

declare @sql varchar(8000)

select @sql = ''

select @sql = @sql + ' alter table [' + object_name(id) +'] alter column ['+name+'] nvarchar('+convert(varchar(4),length)+') '+char(13) from syscolumns

where objectproperty(id,'IsUserTable')=1 and xusertype=167

print @sql

alter table Table1 alter column a nvarchar(50)

alter table sipfriends alter column accountcode nvarchar(20)

+0咯

比如:`server_id` varchar(2) NOT NULL default '',

手动转化类型:

select server_id from cardserver where game_id = 1 order by server_id+0 desc limit

楼主说cast,convert不行 这应该不可能 不知道楼主的用法用对了么?

使用MySQL函数CAST/CONVERT:

select server_id from cardserver where game_id = 1 order by CAST(server_id as SIGNED) desc limit 10;

select server_id from cardserver where game_id = 1 order by CONVERT(server_id,SIGNED) desc limit 10;

问题补充:

不是用cast(name,int)

cast的用法不是这样的

cast跟convert的用法如下 呵呵 这个可以参考资料 希望楼主查阅相关资料你就会知道拉

signed 后面还有个INTEGER 可以不写的 呵呵

用CAST函数或者CONVERT

CAST(expr AS type), CONVERT(expr,type) , CONVERT(expr USING transcoding_name)

CAST() 和CONVERT() 函数可用来获取一个类型的值,并产生另一个类型的值。

这个类型 可以是以下值其中的 一个:

BINARY[(N)]

CHAR[(N)]

DATE

DATETIME

DECIMAL

SIGNED [INTEGER]

TIME

UNSIGNED [INTEGER]

试过了是正确的

希望对您有所帮助

@Prefix

本身你定义的就是varchar型,也就是字符串形式,它后面可以直接连接字符或数字型参数。

你仔细看看你给@Prefix

赋值时,所赋值是否写的是字符串形式,如果是赋的是数值形式将其转化为字符形式就ok了,至于后面连接的参数是否为字符串形式都不是很重要的。

以上就是关于将 varchar 值 '10.04' 转换为数据类型为 int 的列时发生语法错误。全部的内容,包括:将 varchar 值 '10.04' 转换为数据类型为 int 的列时发生语法错误。、将varchar值转换为数据类型为int的列时发生语法错误、SQL server 存储过程varchar到int类型转换等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/10135427.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存