【发布时间】:2011-07-24 03:22:07
【问题描述】:
我想从这个函数中删除变音符号
ALTER PROCEDURE [dbo].[SearchWord] (@Word NVARCHAR(50),
@PageNumber INT,
@ProductsPerPage INT,
@HowManyResults INT OUTPUT)
AS
SET @Word = '%' + RTRIM(@Word) + '%';
DECLARE @Results TABLE (
ProductsId INT,
ProductsCode NVARCHAR(250),
ProductsDesc NVARCHAR(MAX),
ProductsIngredients NVARCHAR(MAX),
ProductsName NVARCHAR(250),
ProductsPhoto NVARCHAR(MAX),
ProductsPrice MONEY,
ProductsWeight2 FLOAT,
RowNumber INT)
-- Obtain the matching products
INSERT INTO @Results
SELECT DISTINCT T1.ProductsID,
T1.ProductsCode,
LOWER(T1.ProductsDesc) asProductsDesc,
T1.ProductsIngredients,
LOWER(T1.ProductsName) AS ProductsName,
T1.ProductsPhoto,
T1.ProductsPrice,
T1.ProductsWeight2,
ROW_NUMBER() OVER(ORDER BY T1.ProductsName) RowNumber
FROM (SELECT ProductsID,
ProductsCode,
LOWER(ProductsDesc) AS ProductsDesc,
ProductsIngredients,
LOWER(ProductsName) AS ProductsName,
ProductsPhoto,
ProductsPrice,
ProductsWeight2
FROM Products
WHERE ProductsName LIKE @Word) AS T1
FULL OUTER JOIN (SELECT *
FROM Products
WHERE ProductsDesc LIKE @Word) AS T2
ON T1.ProductsID = T2.ProductsID
ORDER BY T1.ProductsPrice
DELETE FROM @Results
WHERE NULLIF([ProductsName], '') IS NULL
SELECT @HowManyResults = COUNT(*)
FROM @Results
INSERT INTO @Results
SELECT DISTINCT ProductsId,
ProductsCode,
ProductsDesc,
ProductsIngredients,
LOWER(ProductsName) AS ProductsName,
ProductsPhoto,
ProductsPrice,
ProductsWeight2,
RowNumber
FROM @Results
SELECT DISTINCT ProductsId,
ProductsCode,
ProductsDesc,
ProductsIngredients,
LOWER(ProductsName) AS ProductsName,
ProductsPhoto,
ProductsPrice,
ProductsWeight2,
RowNumber
FROM @Results R
WHERE R.RowNumber > ( @PageNumber - 1 ) * @ProductsPerPage
AND R.RowNumber <= @PageNumber * @ProductsPerPage
ORDER BY R.ProductsPrice ASC
使用这个程序
ALTER PROCEDURE normalizeChars
(@NAME NVARCHAR(100))
AS
BEGIN
DECLARE @TempString NVARCHAR(100)
SET @TempString = @NAME
SET @TempString = LOWER(@TempString)
SET @TempString = REPLACE(@TempString,'à', 'a')
SET @TempString = REPLACE(@TempString,'è', 'e')
SET @TempString = REPLACE(@TempString,'é', 'e')
SET @TempString = REPLACE(@TempString,'ì', 'i')
SET @TempString = REPLACE(@TempString,'ò', 'o')
SET @TempString = REPLACE(@TempString,'ù', 'u')
SET @TempString = REPLACE(@TempString,'ç', 'c')
SET @TempString = REPLACE(@TempString,'''', '')
SET @TempString = REPLACE(@TempString,'`', '')
SET @TempString = REPLACE(@TempString,'-', '')
SET @TempString = REPLACE(@TempString,'ά','α')
SET @TempString = REPLACE(@TempString,'έ','ε')
SET @TempString = REPLACE(@TempString,'ί','ι')
SET @TempString = REPLACE(@TempString,'ό','ο')
SET @TempString = REPLACE(@TempString,'ή','η')
SET @TempString = REPLACE(@TempString,'ύ','υ')
RETURN @TempString
END
on ProductsName and ProductsDesc
有可能吗?如何实现?
【问题讨论】:
-
与其去掉变音符号,不如在搜索时指定排序规则?
-
您的
normalizeChars过程需要是标量 UDF(无论如何,过程都不能返回这样的字符串)。但我同意@Mitch。对口音不敏感的整理子句不适合您吗? -
如何指定不区分重音的排序规则,我想我有。我已经指定了一个列排序,我还没有检查字典复选框中的重音..
-
在数据库级别和列级别设置。你也可以像下面
SELECT * FROM sys.objects where name like N'à%' COLLATE Latin1_General_100_CI_AI那样显式设置。编辑:那么您的专栏有什么排序规则?还有你想做什么?重音不敏感搜索 - 或从显示的结果中去除重音? -
重音不敏感搜索,排序规则为Greek_CI_AI,此查询返回0行SELECT * FROM sys.objects where name like N'à%' COLLATE Greek_CI_AI
标签: sql sql-server search diacritics