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

 

转载于:https://www.cnblogs.com/criedshy/archive/2010/04/12/1710035.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值