Не алфавитные символы - PullRequest
0 голосов
/ 24 марта 2011

У меня есть скрипт t-sql, который извлекает участников нашего сайта, но у меня возникают проблемы с пользователями, которые использовали *, или цифры в названии компании.

У меня есть следующие данные, например:

''Dream A Little Dream''
***Unique Business Card/Sign/Logo Designs***
3D Visual Creations
50dollarbanner.com
etc..

У меня есть буквы алфавита в верхней части страницы, и пользователи могут нажать «A», например, и в нем перечислены все пользователи, начинающиеся с «A», есть ли способ, например, сделать еще один для «0» и в нем будут перечислены все участники, начинающиеся с цифр или странных символов:

Вот мой тестовый скрипт:

DECLARE @TotalPages INT
DECLARE @UserName varchar(50)
DECLARE @PG INT
DECLARE @PageSize INT
SET @UserName = 'Z'
SET @PG = 1
SET @PageSize = 70
BEGIN
    SELECT @TotalPages = COUNT(*)/@PageSize
    FROM Member
    WHERE (sbuser.sf_GetDisplayName(FirstName, LastName, BusinessName, DisplayNameTypeID) LIKE @UserName + '%')
    AND UserName IS NOT NULL;

    WITH FindSBMembers AS
    (
        SELECT ROW_NUMBER() OVER(ORDER BY Claimed DESC, sbuser.sf_MemberHasAvatar(MemberID) DESC) AS RowNum,
        MemberID,                                                -- 1
        UserName,                                                -- 2
        PrCity,                                                  -- 3
        PrStateID,                                               -- 4
        sbuser.sf_MemberHasImages(MemberID) AS MemberHasImages,  -- 5
        sbuser.sf_MemberHasVideo(MemberID) AS MemberHasVideo,    -- 6
        sbuser.sf_MemberHasAudio(MemberID) AS MemberHasAudio,    -- 7
        sbuser.sf_GetDisplayName(FirstName, LastName, BusinessName, DisplayNameTypeID) AS DisplayName,          -- 8
        ProfileTypeID,                                           -- 9
        Zip,                                                   -- 10
        PhoneNbr,                                                -- 11
        PrPhone,                                                 -- 12
        Claimed,                                                 -- 13
        @TotalPages AS TotalPages,                               -- 14
        City                                                     -- 15
        FROM Member
        WHERE (sbuser.sf_GetDisplayName(FirstName, LastName, BusinessName, DisplayNameTypeID) LIKE @UserName + '%')
        AND UserName IS NOT NULL
        -- AND MemberID <> @MemberID
    )
    SELECT * 
    FROM FindSBMembers
    WHERE RowNum BETWEEN (@PG - 1) * @PageSize AND @PG * @PageSize
    ORDER BY Claimed DESC
END

Вот подробности включенного скрипта:

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO

ALTER FUNCTION [sbuser].[sf_GetDisplayName](
@FirstName varchar(50),
@LastName varchar(50),
@BusinessName varchar(50),
@DisplayNameTypeID int)
RETURNS varchar(150) WITH schemabinding

AS

BEGIN
DECLARE @OUT varchar(150)
SET @OUT = ''
SET @FirstName = UPPER(LEFT(LTRIM(RTRIM(@FirstName)), 1)) + RIGHT(LTRIM(RTRIM(@FirstName)), LEN(LTRIM(RTRIM(@FirstName))) - 1)
SET @LastName = UPPER(LEFT(LTRIM(RTRIM(@LastName)), 1)) + RIGHT(LTRIM(RTRIM(@LastName)), LEN(LTRIM(RTRIM(@LastName))) - 1)
SET @BusinessName = UPPER(LEFT(LTRIM(RTRIM(@BusinessName)), 1)) + RIGHT(LTRIM(RTRIM(@BusinessName)), LEN(LTRIM(RTRIM(@BusinessName))) - 1)
IF @DisplayNameTypeID = 2   -- FIRST / LAST NAME
    BEGIN
        SET @OUT = @LastName + ', ' + @FirstName
    END
IF @DisplayNameTypeID = 3 -- FIRST NAME / LAST INITIAL
    BEGIN
        SET @OUT = @FirstName + ' ' + LEFT(@LastName,1) + '.'
    END
IF @DisplayNameTypeID = 4 -- BUSINESS NAME
    BEGIN
        SET @OUT = @BusinessName + ''
    END
RETURN @OUT
END

Большое спасибо за вашу помощь.

С уважением, Пол

Ответы [ 2 ]

0 голосов
/ 24 марта 2011

Используйте что-то вроде этого в начале (перед запросом, который использует @UserName):

IF @UserName = '0' SET @UserName = '[^a-z]';

Если ваша сортировка чувствительна к регистру, то, возможно, вам следует использовать '[^A-Za-z]'.

0 голосов
/ 24 марта 2011

Если вы хотите включить все записи с неалфавитными начальными символами при условии, что входной параметр @UserName равен '0', то вы можете попробовать что-то вроде приведенного ниже предложения WHERE (не проверено)?

Это позволит вам иметь категорию "Разное", которую вы можете получить, вызвав процедуру с @UserName = '0'

 WHERE (     
            (  sbuser.sf_GetDisplayName(FirstName, LastName, BusinessName, 
                                  DisplayNameTypeID) LIKE @UserName + '%'
            )         
         OR
            (
               PatIndex(‘[^A-Za-z]%‘,
                  sbuser.sf_GetDisplayName(FirstName, LastName, BusinessName, 
                                           DisplayNameTypeID)  > 0  ) 
               AND 
               @UserName = '0'
            )         
       )
       AND UserName IS NOT NULL 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...