SQL函数:匹配两个字符串中有相同长度的字符

 

     这个函数写于2008年的一个项目,起因是这样的,客户要求往数据库中导入一批配件(数据太多,他们懒得录入),

但是有些配件名称与原来表中的不一样,比如,轴承3215 和下轴承3215,其实是同一个配件,这样如果导入到库中就变成两个配件了,

(这个原因是客户配件部门经常更改领导,导致配件供应商不一样,所以名称也就不一样了)

当然就不行了。后来就想到在数据库中处理了,因为配件名称部分是一样的,只要指定相同部分的长度,比如轴承3215 和下轴承3215,可以指定相同长度为6

view plaincopy to clipboardprint?
-- ================================================

-- Template generated from Template Explorer using:

-- Create Scalar Function (New Menu).SQL

-- -- Use the Specify Values for Template Parameters

-- command (Ctrl-Shift-M) to fill in the parameter

-- values below.

-- -- This block of comments will not be included in

-- the definition of the function.

-- ================================================

SET ANSI_NULLS ON GO

SET QUOTED_IDENTIFIER ON GO

-- =============================================

-- Author: liuqj

-- Create date: 2008-10-27

-- Description: 用于比较两个字符串是否有相同长度的字符,如果有返回1,如果没有返回0

-- =============================================

ALTER FUNCTION FN_GetSameStrInTwoStr (

-- Add the parameters for the function here

@str1 VARCHAR(100) --源字符串,取该串中的@strLen长度的字符是否在目的字符串

,
@str2 VARCHAR(100) --目的字符串

,
@strLen INT --比较的长度 )

RETURNS INT AS BEGIN -- Declare the return variable here

--定义源字符串的长度

DECLARE @len INT --用于比较时,截取的@strLen长度的字符串

DECLARE @sub VARCHAR(100) --字义返回值

DECLARE @returnValue INT --初使化返回值

SET @returnValue=0 SET @len=LEN(@str1) --如果比较的长度大于源字符串的长度,返回0,既失败

IF @strLen>@len RETURN 0

--定义循环变量

DECLARE @i INT

SET @i=1

/* 从源字符串的第一个字符取@strLen长度的字符, 比较是否在目的字符串,如果没有, 则再从第二个字符取,直到截取的字符串在目的字符中出现 */

WHILE @i<@len-@strLen+1

BEGIN

SELECT @sub= SUBSTRING(@str1,@i,@strLen)

--PRINT(@sub)

IF CHARINDEX(@sub,@str2)>0

BEGIN

SET @returnValue=1

BREAK



END

ELSE

SET @i=@i+1

END

RETURN @returnValue

END

GO


本文来自CSDN博客,转载请标明出处:http:
//blog.csdn.net/criedshy/archive/2010/04/09/5469006.aspx

 

posted @ 2010-04-12 11:06  哭过的天空  阅读(2955)  评论(0编辑  收藏  举报