Mostrando postagens com marcador Validations. Mostrar todas as postagens
Mostrando postagens com marcador Validations. Mostrar todas as postagens

sábado, 16 de janeiro de 2016

Funcao Dia Util SQL Server

Função que recebe uma data como parâmetro e apresenta se o dia é útil, considerando feriados nacionais brasileiros.



CREATE FUNCTION [dbo].[FN_DIAUTIL](@DataMes DateTime)
RETURNS VARCHAR(100)
AS
BEGIN
 
   DECLARE @FORMATO VARCHAR(3)
   SELECT @FORMATO = DATEFORMAT FROM sys.syslanguages S WHERE S.NAME = @@LANGUAGE 

   DECLARE @PASCOA DATETIME
   SELECT @PASCOA = CASE DATEPART(WeekDay,CAST(DD.DIADOURADO AS DATETIME))
                      WHEN 1 THEN DATEPART(WeekDay,CAST(DD.DIADOURADO AS DATETIME))
                      ELSE   DATEADD(day, (8-DATEPART(WeekDay,CAST(DD.DIADOURADO AS DATETIME))) ,DD.DIADOURADO)
                    END
     FROM (SELECT
                 CASE 
                     WHEN (YEAR(@DataMes) % 19)+1 = 1 AND @FORMATO = 'mdy' THEN '04.14.'  
                     WHEN (YEAR(@DataMes) % 19)+1 = 2 AND @FORMATO = 'mdy' THEN '04.03.'
                     WHEN (YEAR(@DataMes) % 19)+1 = 3 AND @FORMATO = 'mdy' THEN '03.23.'  
                     WHEN (YEAR(@DataMes) % 19)+1 = 4 AND @FORMATO = 'mdy' THEN '04.11.'
                     WHEN (YEAR(@DataMes) % 19)+1 = 5 AND @FORMATO = 'mdy' THEN '03.31.'  
                     WHEN (YEAR(@DataMes) % 19)+1 = 6 AND @FORMATO = 'mdy' THEN '04.18.' 
                     WHEN (YEAR(@DataMes) % 19)+1 = 7 AND @FORMATO = 'mdy' THEN '04.08.'  
                     WHEN (YEAR(@DataMes) % 19)+1 = 8 AND @FORMATO = 'mdy' THEN '03.28.'
                     WHEN (YEAR(@DataMes) % 19)+1 = 9 AND @FORMATO = 'mdy' THEN '04.16.'  
                     WHEN (YEAR(@DataMes) % 19)+1 =10 AND @FORMATO = 'mdy' THEN '04.05.'
                     WHEN (YEAR(@DataMes) % 19)+1 =11 AND @FORMATO = 'mdy' THEN '03.25.'  
                     WHEN (YEAR(@DataMes) % 19)+1 =12 AND @FORMATO = 'mdy' THEN '04.13.'
                     WHEN (YEAR(@DataMes) % 19)+1 =13 AND @FORMATO = 'mdy' THEN '04.02.'  
                     WHEN (YEAR(@DataMes) % 19)+1 =14 AND @FORMATO = 'mdy' THEN '03.22.'
                     WHEN (YEAR(@DataMes) % 19)+1 =15 AND @FORMATO = 'mdy' THEN '04.10.'  
                     WHEN (YEAR(@DataMes) % 19)+1 =16 AND @FORMATO = 'mdy' THEN '03.30.'
                     WHEN (YEAR(@DataMes) % 19)+1 =17 AND @FORMATO = 'mdy' THEN '04.17.'  
                     WHEN (YEAR(@DataMes) % 19)+1 =18 AND @FORMATO = 'mdy' THEN '04.07.'
                     WHEN (YEAR(@DataMes) % 19)+1 =19 AND @FORMATO = 'mdy' THEN '03.27.'

                     WHEN (YEAR(@DataMes) % 19)+1 = 1 AND @FORMATO = 'dmy' THEN '14.04.'  
                     WHEN (YEAR(@DataMes) % 19)+1 = 2 AND @FORMATO = 'dmy' THEN '03.04.'
                     WHEN (YEAR(@DataMes) % 19)+1 = 3 AND @FORMATO = 'dmy' THEN '23.03.'  
                     WHEN (YEAR(@DataMes) % 19)+1 = 4 AND @FORMATO = 'dmy' THEN '11.04.'
                     WHEN (YEAR(@DataMes) % 19)+1 = 5 AND @FORMATO = 'dmy' THEN '31.03.'  
                     WHEN (YEAR(@DataMes) % 19)+1 = 6 AND @FORMATO = 'dmy' THEN '18.04.' 
                     WHEN (YEAR(@DataMes) % 19)+1 = 7 AND @FORMATO = 'dmy' THEN '08.04.'  
                     WHEN (YEAR(@DataMes) % 19)+1 = 8 AND @FORMATO = 'dmy' THEN '28.03.'
                     WHEN (YEAR(@DataMes) % 19)+1 = 9 AND @FORMATO = 'dmy' THEN '16.04.'  
                     WHEN (YEAR(@DataMes) % 19)+1 =10 AND @FORMATO = 'dmy' THEN '05.04.'
                     WHEN (YEAR(@DataMes) % 19)+1 =11 AND @FORMATO = 'dmy' THEN '25.03.'  
                     WHEN (YEAR(@DataMes) % 19)+1 =12 AND @FORMATO = 'dmy' THEN '13.04.'
                     WHEN (YEAR(@DataMes) % 19)+1 =13 AND @FORMATO = 'dmy' THEN '02.04.'  
                     WHEN (YEAR(@DataMes) % 19)+1 =14 AND @FORMATO = 'dmy' THEN '22.03.'
                     WHEN (YEAR(@DataMes) % 19)+1 =15 AND @FORMATO = 'dmy' THEN '10.04.'  
                     WHEN (YEAR(@DataMes) % 19)+1 =16 AND @FORMATO = 'dmy' THEN '30.03.'
                     WHEN (YEAR(@DataMes) % 19)+1 =17 AND @FORMATO = 'dmy' THEN '17.04.'  
                     WHEN (YEAR(@DataMes) % 19)+1 =18 AND @FORMATO = 'dmy' THEN '07.04.'
                     WHEN (YEAR(@DataMes) % 19)+1 =19 AND @FORMATO = 'dmy' THEN '27.03.'
                 END + CAST(YEAR(@DataMes) AS VARCHAR(4)) AS DIADOURADO
          ) AS DD

   DECLARE @TB_FERIADOS TABLE (DataMes DateTime, Descricao VARCHAR(100))
   IF @FORMATO = 'dmy'
   BEGIN
    INSERT INTO @TB_FERIADOS SELECT '01-01-'+CAST(YEAR(@DataMes) AS VARCHAR(4)) ,'Confraternização Universal'
    INSERT INTO @TB_FERIADOS SELECT '21-04-'+CAST(YEAR(@DataMes) AS VARCHAR(4)) ,'Tiradentes'
    INSERT INTO @TB_FERIADOS SELECT '01-05-'+CAST(YEAR(@DataMes) AS VARCHAR(4)) ,'Dia do Trabalho'
    INSERT INTO @TB_FERIADOS SELECT '07-09-'+CAST(YEAR(@DataMes) AS VARCHAR(4)) ,'Independencia do Brasil'
    INSERT INTO @TB_FERIADOS SELECT '12-10-'+CAST(YEAR(@DataMes) AS VARCHAR(4)) ,'Nossa Senhora Aparecida'
    INSERT INTO @TB_FERIADOS SELECT '02-11-'+CAST(YEAR(@DataMes) AS VARCHAR(4)) ,'Finados'
    INSERT INTO @TB_FERIADOS SELECT '15-11-'+CAST(YEAR(@DataMes) AS VARCHAR(4)) ,'Proclamação da República'
    INSERT INTO @TB_FERIADOS SELECT '25-12-'+CAST(YEAR(@DataMes) AS VARCHAR(4)) ,'Natal'
   END
   IF @FORMATO = 'mdy'
   BEGIN
    INSERT INTO @TB_FERIADOS SELECT '01-01-'+CAST(YEAR(@DataMes) AS VARCHAR(4)) ,'Confraternização Universal'
    INSERT INTO @TB_FERIADOS SELECT '04-21-'+CAST(YEAR(@DataMes) AS VARCHAR(4)) ,'Tiradentes'
    INSERT INTO @TB_FERIADOS SELECT '05-01-'+CAST(YEAR(@DataMes) AS VARCHAR(4)) ,'Dia do Trabalho'
    INSERT INTO @TB_FERIADOS SELECT '09-07-'+CAST(YEAR(@DataMes) AS VARCHAR(4)) ,'Independencia do Brasil'
    INSERT INTO @TB_FERIADOS SELECT '10-12-'+CAST(YEAR(@DataMes) AS VARCHAR(4)) ,'Nossa Senhora Aparecida'
    INSERT INTO @TB_FERIADOS SELECT '11-02-'+CAST(YEAR(@DataMes) AS VARCHAR(4)) ,'Finados'
    INSERT INTO @TB_FERIADOS SELECT '11-15-'+CAST(YEAR(@DataMes) AS VARCHAR(4)) ,'Proclamação da República'
    INSERT INTO @TB_FERIADOS SELECT '12-25-'+CAST(YEAR(@DataMes) AS VARCHAR(4)) ,'Natal'
   END
   INSERT INTO @TB_FERIADOS SELECT @Pascoa-47  ,'Carnaval'
   INSERT INTO @TB_FERIADOS SELECT @Pascoa-2   ,'Sexta Feira Santa'
   INSERT INTO @TB_FERIADOS SELECT @Pascoa+60  ,'Corpus Christi'
   
   DECLARE @NOMEDIA VARCHAR(13)
   SET @NOMEDIA = CASE DatePart(WeekDay, @DataMes)
                     WHEN 1 THEN 'Domingo'
                     WHEN 2 THEN 'Segunda-Feira'
                     WHEN 3 THEN 'Terça-Feira'
                     WHEN 4 THEN 'Quarta-Feira'
                     WHEN 5 THEN 'Quinta-Feira'
                     WHEN 6 THEN 'Sexta-Feira'
                     WHEN 7 THEN 'Sábado'
                  END
 
 
   DECLARE @RETORNO VARCHAR(100)
   IF (DatePart(WeekDay, @DataMes) BETWEEN 2 AND 6) AND @DataMes NOT IN (SELECT DataMes FROM @TB_FERIADOS)
      SET @RETORNO = 'S'
   ELSE
      SET @RETORNO = 'N'
 
   SET @RETORNO = @RETORNO + ' - ' + @NOMEDIA         
   IF @DataMes IN (SELECT DataMes FROM @TB_FERIADOS)
       SET @RETORNO = @RETORNO + ' - ' +(SELECT Descricao FROM @TB_FERIADOS WHERE DataMes = @DataMes)
 
   RETURN @RETORNO
END
SELECT DBO.FN_DIAUTIL('11.02.2015') AS DIA_UTIL

Funcao Valida CPF ou CNPJ





CREATE FUNCTION [dbo].[Valida_CPFCNPJ](@TEXTO varchar(20)) RETURNS VARCHAR(20)
AS
BEGIN

DECLARE @RESULTADO VARCHAR(20)

DECLARE @CPF_CNPJ VARCHAR(20)

WHILE PATINDEX('%[^0-9]%', @TEXTO) > 0
BEGIN
  SET @TEXTO = STUFF(@TEXTO, PATINDEX('%[^0-9]%', @TEXTO), 1, '')
END

SET @CPF_CNPJ    = @TEXTO

IF LEN(@CPF_CNPJ) NOT IN (11, 14)
BEGIN   
     SET @RESULTADO  = 'Inválido'
     RETURN @RESULTADO
END
 
DECLARE @DIGITO1 INT,  @DIGITO2 INT,  @VALOR1 INT,  @VALOR2 INT
DECLARE @I INT, @J INT, @TOTAL_TMP INT, @COEFICIENTE_TMP INT
   ,    @DIGITO_TMP INT, @VALOR_TMP INT
SET @DIGITO1 = SUBSTRING(@CPF_CNPJ, LEN(@CPF_CNPJ) - 1, 1)
SET @DIGITO2 = SUBSTRING(@CPF_CNPJ, LEN(@CPF_CNPJ), 1)
SET @J = 1
 
WHILE @J <= 2
BEGIN 
    SELECT @TOTAL_TMP = 0, @COEFICIENTE_TMP = 2
    SET @I = ((LEN(@CPF_CNPJ) - 3) + @J)   
    WHILE @I >= 0
    BEGIN
        SELECT
            @DIGITO_TMP = SUBSTRING(@CPF_CNPJ, @I, 1),
            @TOTAL_TMP = @TOTAL_TMP + (@DIGITO_TMP * @COEFICIENTE_TMP),
            @COEFICIENTE_TMP = @COEFICIENTE_TMP + 1
 
        IF (@COEFICIENTE_TMP > 9) AND LEN(@CPF_CNPJ) = 14
            SET @COEFICIENTE_TMP = 2
        SET @I = @I - 1
    END
 
    SET @VALOR_TMP = 11 - (@TOTAL_TMP % 11)
 
    IF (@VALOR_TMP >= 10)
        SET @VALOR_TMP = 0
 
    IF @J = 1
        SET @VALOR1 = @VALOR_TMP
    ELSE
        SET @VALOR2 = @VALOR_TMP
    SET @J = @J + 1
END


SELECT @RESULTADO =
    CASE WHEN @VALOR1 = @DIGITO1 AND @VALOR2 = @DIGITO2
        THEN 'Válido'
        ELSE 'Inválido'
    END

     RETURN @RESULTADO

END

sábado, 25 de maio de 2013

Apenas Números em SQL-Server

Acontece de encontrarmos situações para:
>> Corrigir dados já persistidos por um sistema
>> Precisarmos validar um arquivo de carga para efetivarmos no banco de dados

Uma dessas validações é exatamente retirar dados não numéricos de um texto, segue um código para deixar apenas números a partir de um texto:


DECLARE @TEXTO VARCHAR(MAX)
SET @TEXTO = 'abc123dc4fda$%#'

DECLARE @INDEX SMALLINT
SET @INDEX = PATINDEX('%[^0-9]%', @TEXTO)
WHILE @INDEX > 0
BEGIN
   SET @TEXTO = STUFF(@TEXTO, @INDEX, 1, '')
   SET @INDEX = PATINDEX('%[^0-9]%', @TEXTO)
END
SELECT @TEXTO AS NUMERO

Resultado:

segunda-feira, 15 de abril de 2013

Javascript: Validar Data no Formato DD/MM/YYYY

Sempre que ao pesquisar sobre uma validação de data encontrava muito código para pouco resultado, e após algum estudo resolvi criar uma validação feita por mim, utilizei um conceito muito simples: se após converter o valor para o tipo Data e após a conversão a data ainda for a mesma, quer dizer que a conversão foi um sucesso, então sabemos que a data é válida.


//-----------------------------------------------------------------
// Entrada DD/MM/AAAA
//-----------------------------------------------------------------
function fctValidaData(obj)
{
    var data = obj.value;
    var dia = data.substring(0,2)
    var mes = data.substring(3,5)
    var ano = data.substring(6,10)

    //Criando um objeto Date usando os valores ano, mes e dia.
    var novaData = new Date(ano,(mes-1),dia);

    var mesmoDia = parseInt(dia,10) == parseInt(novaData.getDate());
    var mesmoMes = parseInt(mes,10) == parseInt(novaData.getMonth())+1;
    var mesmoAno = parseInt(ano) == parseInt(novaData.getFullYear());

    if (!((mesmoDia) && (mesmoMes) && (mesmoAno)))
    {
        alert('Data informada é inválida!');   
        obj.focus();    
        return false;
    }  
    return true;
}

Segue abaixo um exemplo de como utilizar a function:


<body>

Data: 
<input type='text' id='txtDt' name='txtDt' onblur='fctValidaData(this);'/>

</body>