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