如何在不计算第一个字母的情况下在SQL Server 2017中获取字符串的第一个内部元音?

时间:2019-05-31 21:55:11

标签: sql-server sql-server-2017

我需要执行RFC(墨西哥的税收参考),通过SQL函数,除了需要放置的元音之外,我还可以毫无问题地获得其他字符,因为我无法为C#执行或Java在一段时间内无法通过“字符串”处理。

请帮助。

这是我到目前为止一直在做的事情:

DECLARE
@position INT,
@fecha_nac VARCHAR(50),
@i INT,
@vo CHAR,
@ap CHAR

BEGIN

SET @fecha_nac = 'Pineda'
SET @i = 1
SET @ap = 'P'

BEGIN
DECLARE @ct INT

WHILE @i > 0
BEGIN   
    SET @ct = @ct + 1

    SET @position = CHARINDEX('a', @fecha_nac COLLATE Latin1_General_CS_AS)
    SET @vo = SUBSTRING(@fecha_nac, @position, 1)   

    IF @vo = @ap
    BEGIN
        SET @position = CHARINDEX('a', @fecha_nac COLLATE Latin1_General_CS_AS)
        SET @vo = SUBSTRING(@fecha_nac, @position, 1)
    END
    --  SET @position = CHARINDEX('e',@fecha_nac COLLATE Latin1_General_CS_AS)
    --  SET @vo = SUBSTRING(@fecha_nac,@position,1)
    --  IF @vo = @ap
--          BEGIN
--              set @position=CHARINDEX('e',@fecha_nac COLLATE Latin1_General_CS_AS)
--              SET @vo= SUBSTRING(@fecha_nac,@position,1)
--          END
--      SET @position=CHARINDEX('i',@fecha_nac COLLATE Latin1_General_CS_AS)
--      SET @vo= SUBSTRING(@fecha_nac,@position,1)
--      IF @vo=@ap
--          BEGIN
--              set @position=CHARINDEX('i',@fecha_nac COLLATE Latin1_General_CS_AS)
--              SET @vo= SUBSTRING(@fecha_nac,@position,1)
--          END
--      SET @position=CHARINDEX('o',@fecha_nac COLLATE Latin1_General_CS_AS)
--      SET @vo= SUBSTRING(@fecha_nac,@position,1)
--      IF @vo=@ap
--          BEGIN
--              set @position=CHARINDEX('o',@fecha_nac COLLATE Latin1_General_CS_AS)
--              SET @vo= SUBSTRING(@fecha_nac,@position,1)
--          END
--      SET @position=CHARINDEX('u',@fecha_nac COLLATE Latin1_General_CS_AS)
--      SET @vo= SUBSTRING(@fecha_nac,@position,1)
--      IF @vo=@ap
--          BEGIN
--              set @position=CHARINDEX('u',@fecha_nac COLLATE Latin1_General_CS_AS)
--              SET @vo= SUBSTRING(@fecha_nac,@position,1)
--          END
----    

        SET @i=0
    END
END
        SELEct @vo
    --Select Vowel_ap_p = UPPER(SUBSTRING('Pineda',@position,1))
END

该功能的代码

CREATE FUNCTION Obtener_RFC(@nombre varchar(50), @ap_paterno varchar(50), 
@ap_materno varchar(50), @fecha_nac date)
RETURN VARCHAR(250)

 AS

BEGIN


DECLARE         
@RFC varchar(250),
@Prime_ap_p char,
@Vowel_ap_p char,
@Prime_ap_m char,
@Prime_name char,
@aa int,@mm int,@yy int,
@len int,
@position int

    SET @Prime_ap_p = SUBSTRING(@ap_paterno,1,1)        
    SET @Prime_ap_m = SUBSTRING(@ap_materno,1,1)

    SET @Len= LEN(@fecha_nac)

    IF @len= 8
    BEGIN
        SET @yy= SUBSTRING(convert(char,@fecha_nac),3,2)
        SET @mm= SUBSTRING(convert(char,@fecha_nac),5,2) 
        SET @aa = SUBSTRING(convert(char,@fecha_nac),7,2)
    END

    IF @len=10
    BEGIN
        SET @yy= SUBSTRING(convert(char,@fecha_nac),3,2)
        SET @mm= SUBSTRING(convert(char,@fecha_nac),7,2) 
        SET @aa = SUBSTRING(convert(char,@fecha_nac),9,2)
    END


    SET @Vowel_ap_p = UPPER(SUBSTRING(@ap_paterno,@position,1))



    Return @RFC
    END

0 个答案:

没有答案