
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类型转换等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)