请问在SQL里面,一个字段类型是字符串,里面存的都是像“3×10”的,请问怎样都能把这个“3×10”拆掉,变成一个真正的“3乘10”计算表达式。有没有函数可以直接做到这一点?

解决方案 »

  1.   

    还不知道有没有这个函数!
    不过可以用substring()函数把它拆开!
      

  2.   

    如果用substring函数的话,如是是"3.1×10.2"那就麻烦了。
      

  3.   

    分隔字符串可以
    让你参考:
    string Email= "[email protected]";
    string [] strs = temp.Split('@');
    获得@前面的 = strs[0];//这里
      

  4.   

    string Email= "[email protected]";
    string [] strs = Email.Split('@');
    获得@前面的 = strs[0];//这里应该是这样,写错了,不好意思:(
      

  5.   

    没有这样的函数,要自己写!
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_split]') and xtype in (N'FN', N'IF', N'TF'))
    drop function [dbo].[f_split]
    GOif exists (select * from dbo.sysobjects where id = object_id(N'[序数表]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    drop table [序数表]
    GO--为了效率,所以要一个辅助表配合
    select top 8000 id=identity(int,1,1) into 序数表 
    from syscolumns a,syscolumns b
    alter table 序数表 add constraint pk_id_序数表 primary key(id)
    go/*--字符串分函数 分拆指定分隔符的的字符串,返回结果表--邹建 2004.04(引用请保留此信息)--*//*--调用示例 select * from f_split('考号kaohao 科目kemu 学期xueqi',' ')
    --*/
    create function f_split(
    @str varchar(8000), --要分拆的字符串
    @splitchar varchar(10) --分隔符
    )returns table
    as
    return(
    select re=substring(@str,id,charindex(@splitchar,@str+@splitchar,id)-id)
    from 序数表 
    where id<=len(@str)+1 and charindex(@splitchar,@splitchar+@str,id)-id=0
    )
    go
      

  6.   

    可以使用 sp_executesql 来执行这个计算,如:declare @result int                -- 保存结果
    declare @expression nvarchar(500)  -- 计算表式
    declare @stmt nvarchar(500)        -- 执行语句set @stmt = 'select @result = '
    set @expression = '3×10'-- 把 × 替换成 *, 因为在程序中不认 ×
    set @expression = replace(@expression, '×', '*')-- 和 @stmt 连接起来,组成一个实际的 SQL 语句
    set @stmt = @stmt + @expressionexec sp_executesql @stmt, N'@result int out', @result outprint(@result)
      

  7.   

    可以办到:update table_name set col_name=replace(col_name,'*','乘')就ok了!