怎么将sql server 语句中integer类型转换成string
如:qryExecSQL.Close;qryExecSQL.SQL.Clear;qryExecSQL.SQL.Text:='selectday(optime)asDAYs...
如:
qryExecSQL.Close;
qryExecSQL.SQL.Clear;
qryExecSQL.SQL.Text:='select day(optime) as DAYs,sum(amount) as ''金额'' ';
qryExecSQL.SQL.Add('from vwtblSelFoods where (year(optime)=year(getdate()) AND month(optime)=month(getdate())) group by day(optime)');
qryExecSQL.SQL.Add('order by DAYs asc') ;
qryExecSQL.Open;
在sql查询分析器里可以执行,但在代码中执行就报错: Type mismatch for field 'DAYs', expecting: String actual: Integer'.
optime是个日期类型这个 'DAYs'我要在报表中显示出来 展开
qryExecSQL.Close;
qryExecSQL.SQL.Clear;
qryExecSQL.SQL.Text:='select day(optime) as DAYs,sum(amount) as ''金额'' ';
qryExecSQL.SQL.Add('from vwtblSelFoods where (year(optime)=year(getdate()) AND month(optime)=month(getdate())) group by day(optime)');
qryExecSQL.SQL.Add('order by DAYs asc') ;
qryExecSQL.Open;
在sql查询分析器里可以执行,但在代码中执行就报错: Type mismatch for field 'DAYs', expecting: String actual: Integer'.
optime是个日期类型这个 'DAYs'我要在报表中显示出来 展开
5个回答
展开全部
SQL Server中的数值类型分为两种,一种是精确的数值类型,具体的数据类型有:
bit、tinyint、smallint、int、bigint、smallmoney、money和decimal,这些数据类型能够精确的表明某以数值;
另一种是近似的数值类型,具体就是float和real。
浮点数据为近似值,因此,并非数据类型范围内的所有值都能精确地表示。
有些时候需要将这些数值类型转换为字符串类型,用到的转换函数就是cast和convert,这两个函数的作用都是进行类型转换,只不过语法格式不同。
对于精确数值的数据类型,转换出来的字符串就是存储的数值,比如:
declare @i int
set @i=123456789
print 'test:'+convert(varchar(20),@i)
输出就是:test:123456789
而如果对于近似数值的数据类型,那么可就没有那么简单了。
declare @i float
set @i=123456789
print 'test:'+convert(varchar(20),@i)
输出结果:test:1.23457e+008
输出的结果是使用科学计数法来表示的,再看看可否通过指定转换样式来指定不使用科学计数法呢?帮助文档中说到float 或 real 转换为字符数据时的 style 值:
0(默认值)最大为 6 位数。根据需要使用科学记数法。
1 始终为 8 位值。始终使用科学记数法。
2 始终为 16 位值。始终使用科学记数法。
值是123456789,超过了6位数.所以不管是0还是1,2结果都会使用科学计数法来表示。
那么要怎么样才能将我们的数据不转换成科学计数法而输出呢?比较简单的办法就是将近似数据转换为精确数据,然后再将精确数据转换成字符串。
同样以上面的例子为例, 进行两次数据类型的转换如下:
declare @i float
set @i=123456789
print 'test:'+convert(varchar(20),convert(int,@i))
输出:test:123456789如果是有小数,那么我们要转换出小数位的话,可以转换成decimal,转换出的小数位数在定义decimal时指定。
比如要输出4位小数,那么转换代码是:
declare @i float
set @i=123456789.12
print 'test:'+convert(varchar(20),convert(decimal(18,4),@i))
输出:test:123456789.1200
bit、tinyint、smallint、int、bigint、smallmoney、money和decimal,这些数据类型能够精确的表明某以数值;
另一种是近似的数值类型,具体就是float和real。
浮点数据为近似值,因此,并非数据类型范围内的所有值都能精确地表示。
有些时候需要将这些数值类型转换为字符串类型,用到的转换函数就是cast和convert,这两个函数的作用都是进行类型转换,只不过语法格式不同。
对于精确数值的数据类型,转换出来的字符串就是存储的数值,比如:
declare @i int
set @i=123456789
print 'test:'+convert(varchar(20),@i)
输出就是:test:123456789
而如果对于近似数值的数据类型,那么可就没有那么简单了。
declare @i float
set @i=123456789
print 'test:'+convert(varchar(20),@i)
输出结果:test:1.23457e+008
输出的结果是使用科学计数法来表示的,再看看可否通过指定转换样式来指定不使用科学计数法呢?帮助文档中说到float 或 real 转换为字符数据时的 style 值:
0(默认值)最大为 6 位数。根据需要使用科学记数法。
1 始终为 8 位值。始终使用科学记数法。
2 始终为 16 位值。始终使用科学记数法。
值是123456789,超过了6位数.所以不管是0还是1,2结果都会使用科学计数法来表示。
那么要怎么样才能将我们的数据不转换成科学计数法而输出呢?比较简单的办法就是将近似数据转换为精确数据,然后再将精确数据转换成字符串。
同样以上面的例子为例, 进行两次数据类型的转换如下:
declare @i float
set @i=123456789
print 'test:'+convert(varchar(20),convert(int,@i))
输出:test:123456789如果是有小数,那么我们要转换出小数位的话,可以转换成decimal,转换出的小数位数在定义decimal时指定。
比如要输出4位小数,那么转换代码是:
declare @i float
set @i=123456789.12
print 'test:'+convert(varchar(20),convert(decimal(18,4),@i))
输出:test:123456789.1200
展开全部
''金额'' 不需要带双引号
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
cast就可以解决。
cast(DAYS AS NVARCHAR(4))
cast(DAYS AS NVARCHAR(4))
追问
cast(DAYS AS NVARCHAR(4)) 加在SQL语句哪
追答
qryExecSQL.Close;
qryExecSQL.SQL.Clear;
qryExecSQL.SQL.Text:='select day(optime) as DAYs
//我不知道你这个是什么程序,看样子像DEPHI,但是SQL语法错误,as后面跟的应该是列名,
//用''括起来的,这里应该是select day(optime) as '天数'
,sum(amount) as ''金额'' ';
//还有这里,带入到SQL中的不能有双引号,这句应该是 as '金额'
qryExecSQL.SQL.Add('from vwtblSelFoods where (year(optime)=year(getdate()) AND month(optime)=month(getdate())) group by day(optime)');
qryExecSQL.SQL.Add('order by DAYs asc') ;
//还有这里,DAYs必须是数据表中存在的字段
qryExecSQL.Open;
来自【MrHuo工作室】,MRHUO工作室承接兰州软件开发,兰州网站开发,兰州企业网站开发,兰州办公OA开发,兰州网站程序维护,兰州网站服务器维护,兰州ACCESS,SQL互转等业务,欢迎各位需要的朋友找我们,我们一定竭力服务!
官方网址:www.mrhuo.com
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
DAYS.ToString()
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Convert()
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询