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
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.
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:
Resultado:
>> 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>
Assinar:
Postagens (Atom)