Funciones que utilizan conjuntos de caracteres no basados ​​en inglés

Tengo una función que básicamente elimina los números de una selección. Esta función funciona muy bien en conjuntos de caracteres basados ​​en inglés. Tengo un nuevo conjunto de datos que se compone de caracteres no ingleses (chino, japonés, indio, etc.) y no obtengo el efecto deseado. estoy usando el NVarchar configurado para almacenar cualquier registro que no esté en inglés. A continuación se muestra la función que estoy usando actualmente. Cualquier consejo sería realmente útil.

GO
/****** Object:  UserDefinedFunction [dbo].[StripVenName]    Script Date: 05/03/2012 16:24:46 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE FUNCTION [dbo].[StripVenName] (@InString as VarChar(8000))                           
RETURNS NVarChar(100) AS                            
BEGIN                           
    Declare @ReturnVal as NVarchar(4000)                        
    Declare @OutString as NVarchar(4000)                        
    Declare @Pos as smallint                        
    Declare @CurChar as NVarChar(1)                     

    IF LEN(@InString) = 0                       
        SET @ReturnVal = ''                 
    ELSE                        
    BEGIN                       
        Set @Pos = 1                    
        SET @OutString = ' '                    
        WHILE (@Pos <= Len(@InString))                  
        BEGIN                   
            Set @CurChar =  SUBSTRING(@InString, @Pos, 1)               
            if ASCII(@CurChar) between 65 and 90 or ASCII(@CurChar) between 97 and 122              
                SET @OutString = @OutString +   @CurChar            
            Set @Pos = @Pos + 1             
        END                 

        if len(@OutString) = 0                  
            SET @OutString = @InString              
        SET @ReturnVal = LTRIM(RTRIM(@OutString))                   
    END                     
RETURN @ReturnVal                           

END 

preguntado el 03 de mayo de 12 a las 21:05

Agregue [etiquetas] a su pregunta (al menos el idioma) -

Parece que su parámetro de entrada es varchar en lugar de nvarchar. -

G Mastros Buena captura. Eso parece haber funcionado. No puedo creer que no vi eso. se debe estar haciendo tarde en el día. -

1 Respuestas

Escribí un blog sobre esto hace varios años. El blog explica cómo quitar letras, pero quieres quitar números. Consulte el blog para obtener una explicación completa. SQL Server Extrayendo datos

Su código puede reducirse a esto (y también funcionará mejor).

Create Function [dbo].[RemoveNumericCharacters](@Temp NVarChar(1000))
Returns NVarChar(1000)
AS
Begin

    While PatIndex(N'%[0-9]%', @Temp) > 0
        Set @Temp = Stuff(@Temp, PatIndex(N'%[0-9]%', @Temp), 1, N'')

    Return @Temp
End

contestado el 03 de mayo de 12 a las 21:05

¡Estupendo! Gracias por la ayuda. Me aseguraré de revisar tu blog. y también voy a usar tu código. gracias de nuevo. - Brian Cascone

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.