这个函数写于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
-- ================================================
-- 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