CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
(图)邪恶的韩国UMPC 使用 Java 编写数据库应用新规范
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

一个超级烦人的运算问题

楼主bcwchina(修哲)2006-12-01 11:51:23 在 MS-SQL Server / 基础类 提问

我的数据库表中的某字段的内容是3*4,字段类型是varchar,我想查出来的结果是12,而不是3*4,我想让其先运算,如何写这个sql语句? 问题点数:10、回复次数:19Top

1 楼bcwchina(修哲)回复于 2006-12-01 12:00:27 得分 0

怎么没有人顶一下     啊Top

2 楼bcwchina(修哲)回复于 2006-12-01 12:05:23 得分 0

这里有没有高手啊,怎么连这个问题都解决不了啊.郁闷的要死Top

3 楼hhhdyj(萤火虫)回复于 2006-12-01 12:16:03 得分 0

/*--计算表达式的函数  
   
  计算给定算术表达式的值  
   
  此方法由VB版   hhjjhjhj(大头)    
  提供的VB处理程序程序上改造而来  
   
  --邹建   2004.07(引用请注明此信息)--*/  
   
  /*--调用示例  
   
  select   dbo.f_calc('123+456')  
  --*/  
  create   function   f_calc(  
  @str   varchar(1000)--要计算的表达式  
  )returns   sql_variant  
  as  
  begin  
  declare   @re   sql_variant  
   
  declare   @err   int,@src   varchar(255),@desc   varchar(255)  
  declare   @obj   int  
   
  exec   @err=sp_oacreate   'MSScriptControl.ScriptControl',@obj   out  
  if   @err<>0   goto   lb_err  
   
  exec   @err=sp_oasetproperty   @obj,'Language','vbscript'  
  if   @err<>0   goto   lb_err  
   
  exec   @err=sp_oamethod   @obj,'Eval',@re   out,@str  
  if   @err=0   return(@re)  
   
  lb_err:  
  exec   sp_oageterrorinfo   NULL,   @src   out,   @desc   out    
  declare   @errb   varbinary(4),@s   varchar(20)  
  set   @errb=cast(@err   as   varbinary(4))  
  exec   master..xp_varbintohexstr   @errb,@s   out  
  return('错误号:   '+@s+char(13)+'错误源:   '+@src+char(13)+'错误描述:   '+@desc)  
  end  
  go  
  Top

4 楼hhhdyj(萤火虫)回复于 2006-12-01 12:16:29 得分 0

转的别的帖。Top

5 楼bcwchina(修哲)回复于 2006-12-01 12:19:39 得分 0

有没有简单一点的啊,太多了吧,Top

6 楼asuan(~不要叫我高手~)回复于 2006-12-01 12:29:19 得分 0

如果你的字段内容都是这个格式的就没问题:  
    select   convert(int,left(b,CHARINDEX('*',b)-1))*convert(int,right(b,len(b)-   CHARINDEX('*',b))   )      
  from   (   select   '3*4'   as   b)   as   aTop

7 楼bcwchina(修哲)回复于 2006-12-01 12:39:03 得分 0

不对啊,我复制过去说  
  服务器:   消息   111,级别   15,状态   1,行   3  
  'CREATE   FUNCTION'   必须是批查询中的第一条语句。  
  服务器:   消息   137,级别   15,状态   1,行   20  
  必须声明变量   '@str'。  
  服务器:   消息   178,级别   15,状态   1,行   22  
  在此上下文中不能使用带有返回值的   RETURN   语句。  
  服务器:   消息   178,级别   15,状态   1,行   28  
  在此上下文中不能使用带有返回值的   RETURN   语句。  
  Top

8 楼bcwchina(修哲)回复于 2006-12-01 12:40:06 得分 0

我的字段格式有的是数字,有的是数字*数字,该如何写Top

9 楼xiaoku(野蛮人(^v^))回复于 2006-12-01 12:49:57 得分 0

我的可以:  
   
   
   
  select   dbo.f_calc('123-456')  
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
  -----------------------------------  
  123456  
   
  (所影响的行数为   1   行)  
   
  select   dbo.f_calc('123-456')  
  -----------------------------------  
  -333  
   
  (所影响的行数为   1   行)Top

10 楼reizedelphi()回复于 2006-12-01 12:51:12 得分 0

哎呀   写一个表达式解析器就可以了Top

11 楼xiaoku(野蛮人(^v^))回复于 2006-12-01 12:53:32 得分 0

ls的如何写阿?Top

12 楼asuan(~不要叫我高手~)回复于 2006-12-01 13:19:19 得分 10

select   convert(int,left(字段名,CHARINDEX('*',字段名)-1))*convert(int,right(字段名,len(字段名)-   HARINDEX('*',字段名))   )      
  from   表名Top

13 楼bcwchina(修哲)回复于 2006-12-01 13:20:43 得分 0

to:reizedelphi()    
   
  表达式解析器如何写啊Top

14 楼asuan(~不要叫我高手~)回复于 2006-12-01 13:22:00 得分 0

select   case   CHARINDEX('*',字段名)   when   0   then   字段名   else   convert(int,left(字段名,CHARINDEX('*',字段名)-1))*convert(int,right(字段名,len(字段名)-   HARINDEX('*',字段名))   )     end  
  from   表名  
  Top

15 楼asuan(~不要叫我高手~)回复于 2006-12-01 13:22:38 得分 0

数字的就直接取出来,不是数据的就先运算Top

16 楼marco08(天道酬勤)回复于 2006-12-01 13:47:06 得分 0

create   table   T(col   varchar(10))  
  insert   T   select   '3*4'  
  union   all   select   '4*6'  
   
  declare   @sql   varchar(4000)  
  set   @sql=''  
  select   @sql=@sql+'select   '+col+'   union   all   '   from   T  
  select   @sql=left(@sql,   len(@sql)-10)  
  exec(@sql)  
   
  --result  
  -----------    
  12  
  24Top

17 楼marco08(天道酬勤)回复于 2006-12-01 13:47:28 得分 0

用動態SQL試試Top

18 楼bcwchina(修哲)回复于 2006-12-01 15:37:42 得分 0

To:asuan(~不要叫我高手~)    
  服务器:   消息   195,级别   15,状态   10,行   1  
  'HARINDEX'   不是可以识别的   函数名。  
  Top

19 楼bcwchina(修哲)回复于 2006-12-01 15:43:24 得分 0

o   ,好了,谢谢asuan(~不要叫我高手~)    
  马上揭贴Top

相关问题

关键词

得分解答快速导航

  • 帖主:bcwchina
  • asuan

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
惹火投票。。火热进行中...
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo