Solução para o erro “Tipo de dados datetime resultou em um valor fora do intervalo” no SQL Server

Instalações do SQL Server em pt-Br podem apresentar o erro: “A conversão de um tipo de dados nvarchar em um tipo de dados datetime resultou em um valor fora do intervalo” em comandos SQL quando envolvem datas, o problema ocorre justamente pelo formato de Datetime ser diferente entre o Português e o Inglês.

Esse problema ocorre porque meu banco de dados instalado está no idioma pt-BR.

Para alterar o idioma, execute o comando abaixo no banco onde deve ser aplicada a alteração.

    Exec sp_defaultlanguage 'usuário', 'idioma'
    Reconfigure

Convertendo a linguagem do banco para Ingês Estados Unidos

    Exec sp_defaultlanguage 'sa', 'us_english'
    Reconfigure

Somar valores em uma data específica com MySQL

GROUP especifica um método bastante simples de agrupar valores com MySQL e outros gerenciadores de banco de dados, no exemplo a seguir é demonstrado como somar os valores de várias linhas de uma tabela, em uma data específica:

SELECT SUM(total) as total, data FROM venda WHERE MONTH(data_venda) = 12 GROUP BY data

A query acima soma todos os valores de todas as linhas da coluna total quando o Mês for 12, usando a função MONTH() do MySQL, e agrupa pelas datas iguais.

As funções DAY() e YEAR() também podem ser usadas com o mesmo propósito.

Na necessidade de se saber o total em um respectivo mês, por exemplo, a query a seguir por ser uma boa solução:

SELECT SUM(total) as total FROM venda WHERE MONTH(data_venda) = 12

em um ano específico:

SELECT SUM(total) as total FROM venda WHERE YEAR(data_venda) = 2013

fonte: http://www.vbmania.com.br/pages/?varModulo=Forum&varMethod=abrir&varID=362818

 

Trabalhando com Datas no Sqlite

Muitas pessoas têm dúvida na hora de trabalhar com datas no sqlite, o que é aceitável já que sqlite não tem um tipo data que possa ser especificado para um campo, como date ou datetime, por exemplo, o que nos resta então é usar os tipos nativos do sqlite para armazenar e manipular as datas, ou seja, podemos usar:

TEXT para armazenar uma string com o valor da data, exemplo “2013-03-03 21:21:00”, dessa forma podemos ordenar os valores de acordo com o campo data sem problemas.

Repare que no trecho do código abaixo o campo datahora e ultima são criados com o tipo TEXT.

CREATE TABLE IF NOT EXISTS conta
             (codigo INTEGER PRIMARY KEY AUTOINCREMENT, 
             datahora TEXT, 
             ultima TEXT, 
             descricao TEXT, 
             status_excluido INTEGER DEFAULT 0)'

O próximo trecho de código mostra como gravar o DATETIME atual do sistema usando uma das funções de manipulação de datas do Sqlite:

INSERT INTO conta(datahora, descricao) values(datetime('now'),'Exemplo de texto');

Existem ainda duas outras formas recomendas de trabalhar com datas no Sqlite, que são:

– Usar um campo do tipo REAL e armazenar as datas no formato Juliano.

– Por último, usar um campo do tipo INTEGER para armazenar um valor UNIX TIME, por exemplo.

Os dois últimos tem a vantagem de permitirem comparações entre datas, subtração ou adição, de forma mais simples e direta.

Abaixo alguns links de referência que podem ser bastante úteis na manipulação de datas com Sqlite:

Lista de funções para manipulação de datas
http://www.sqlite.org/lang_datefunc.html

Documentação sobre Datas e outros tipos no Sqlite
http://www.sqlite.org/datatype3.html