单纯就一句的话就用4楼的replace解决 

解决方案 »

  1.   

    记录量大而且每条都不一样的话。
    看看要截取的长度是否确定,确定的话,用substring试试。
    update  tb  set  fd1=substring(fd1,charindex('<',fd1),长度) 
      

  2.   

    sql中不能使用正则表达式吧?
      

  3.   

    T-SQL中的正则表达式原作者:Cory Koski
    发表时间:2003/06/24
            本文来自Cory Koski。Cory写道:“我最近遇到一个问题,就是试图在数据库域中搜索一个正则表达式。还没有一个版本的SQLServer内部支持正则表达式,但我发现了一个将正则表达式的所有优点添加到你的T_SQL应用的方法。为了更容易的使用正则表达式,我们可以使用自定义函数(User Defined Function, UDF)来帮助我们并使工作简洁。”在这个解决方案中,我们需要SQL Server 2000或更高。我们还需要确定机器中有VBScript.RegExp类库,这随大多数Windows 2000 servers中的Windows Scripting包配有。若你正在使用一个更早版本的Windows,你必须为你的操作系统下载最新版的Windows Scripting。
    自定义函数
    下面是我的自定义函数,可用来在源字符串中搜索一个正则模式表达式。
    CREATE FUNCTION dbo.find_regular_expression
     (
      @source varchar(5000),
      @regexp varchar(1000),
      @ignorecase bit = 0
     )
    RETURNS bit
    AS
     BEGIN
      DECLARE @hr integer
      DECLARE @objRegExp integer
      DECLARE @objMatches integer
      DECLARE @objMatch integer
      DECLARE @count integer
      DECLARE @results bit
      
      EXEC @hr = sp_OACreate 'VBScript.RegExp', @objRegExp OUTPUT
      IF @hr <> 0 BEGIN
       SET @results = 0
       RETURN @results
      END
      EXEC @hr = sp_OASetProperty @objRegExp, 'Pattern', @regexp
      IF @hr <> 0 BEGIN
       SET @results = 0
       RETURN @results
      END
      EXEC @hr = sp_OASetProperty @objRegExp, 'Global', false
      IF @hr <> 0 BEGIN
       SET @results = 0
       RETURN @results
      END
      EXEC @hr = sp_OASetProperty @objRegExp, 'IgnoreCase', @ignorecase
      IF @hr <> 0 BEGIN
       SET @results = 0
       RETURN @results
      END 
      EXEC @hr = sp_OAMethod @objRegExp, 'Test', @results OUTPUT, @source
      IF @hr <> 0 BEGIN
       SET @results = 0
       RETURN @results
      END
      EXEC @hr = sp_OADestroy @objRegExp
      IF @hr <> 0 BEGIN
       SET @results = 0
       RETURN @results
      END
     RETURN @results
     END将这个UDF保存到你的数据库中,并确定有授权来运行它。当然,你也得确保运行它的人有运行sp_OAxxxxx类扩展存储过程的权限。
    这个函数已确保正常运行,并且即便是和COM对象一起使用,也还是挺快的。举例
    使用正则表达式的一个地方就是测试特殊字符。我们不搜索所有的特殊字符,而是查找正常字符的匹配项,例如字母和空格。我们看看它的运行。
    DECLARE @intLength AS INTEGER
    DECLARE @vchRegularExpression AS VARCHAR(50)
    DECLARE @vchSourceString as VARCHAR(50)
    DECLARE @vchSourceString2 as VARCHAR(50)
    DECLARE @bitHasNoSpecialCharacters as BIT-- 初始化变量
    SET @vchSourceString = 'Test one This is a test!!'
    SET @vchSourceString2 = 'Test two This is a test'-- 我们的正则表达式应该类似于
    -- [a-zA-Z ]{}
    -- 如: [a-zA-Z ]{10}  ...  一个十字符的字符串-- 获得字符串长度
    SET @intLength = LEN(@vchSourceString)-- 设置完整的正则表达式
    SET @vchRegularExpression = '[a-zA-Z ]{' + 
    CAST(@intLength as varchar) + '}'-- 是否有任何特殊字符
    SET @bitHasNoSpecialCharacters = dbo.find_regular_expression(
    @vchSourceString, @vchRegularExpression,0)PRINT @vchSourceString
    IF @bitHasNoSpecialCharacters = 1 BEGIN
     PRINT 'No special characters.'
    END ELSE BEGIN
     PRINT 'Special characters found.'
    ENDPRINT '---'-- 获得字符串长度
    SET @intLength = LEN(@vchSourceString2)-- 设置完整的正则表达式
    SET @vchRegularExpression = '[a-zA-Z ]{' + 
    CAST(@intLength as varchar) + '}'-- 是否有任何特殊字符
    SET @bitHasNoSpecialCharacters = dbo.find_regular_expression(
    @vchSourceString2, @vchRegularExpression,0)PRINT @vchSourceString2
    IF @bitHasNoSpecialCharacters = 1 BEGIN
     PRINT 'No special characters.'
    END ELSE BEGIN
     PRINT 'Special characters found.'
    ENDGO
    The results for this example would be: 
    本例的结果应该是:
    Test one This is a test!!
    Special characters found.
    ---
    Test two This is a test
    No special characters.结论:
    正如你所见,这是一个简单技巧,在特定的场合得到了非常有用的结果。你作为一个T_SQL开发人员,可以在正则表达式库VBScript.RegExp中使用和扩展这个技巧。 
      

  4.   

    转一个正则表达式函数!
    create function dbo.regexReplace
    (
    @source varchar(5000), --原字符串
    @regexp varchar(1000), --正则表达式
    @replace varchar(1000), --替换值
    @globalReplace bit = 0, --是否是全局替换
    @ignoreCase bit = 0 --是否忽略大小写
    )
    returnS varchar(1000) AS
    begin
    declare @hr integer
    declare @objRegExp integer
    declare @result varchar(5000)exec @hr = sp_OACreate 'VBScript.RegExp', @objRegExp OUTPUT
    IF @hr <> 0 begin
    exec @hr = sp_OADestroy @objRegExp
    return null
    end
    exec @hr = sp_OASetProperty @objRegExp, 'Pattern', @regexp
    IF @hr <> 0 begin
    exec @hr = sp_OADestroy @objRegExp
    return null
    end
    exec @hr = sp_OASetProperty @objRegExp, 'Global', @globalReplace
    IF @hr <> 0 begin
    exec @hr = sp_OADestroy @objRegExp
    return null
    end
    exec @hr = sp_OASetProperty @objRegExp, 'IgnoreCase', @ignoreCase
    IF @hr <> 0 begin
    exec @hr = sp_OADestroy @objRegExp
    return null
    end 
    exec @hr = sp_OAMethod @objRegExp, 'Replace', @result OUTPUT, @source, @replace
    IF @hr <> 0 begin
    exec @hr = sp_OADestroy @objRegExp
    return null
    end
    exec @hr = sp_OADestroy @objRegExp
    IF @hr <> 0 begin
    return null
    endreturn @result
    end
    GO--调用
    create table t
    (col varchar(50))insert t
    select '12ABCDEFG34' union all
    select 'A1B2C3' union all
    select 'DDKFDK34KD23'
    select cast(dbo.regexReplace(col,'[^0-9]','',1,1) as varchar(30)) as col from tdrop table t
    drop function dbo.regexReplacecol                            
    ------------------------------ 
    1234
    123
    3423(所影响的行数为 3 行)