Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O SQL Server 2008 introduziu novos tipos de dados para lidar com informações de data e hora. Os novos tipos de dados incluíam tipos separados para data e hora e tipos de dados expandidos com maior alcance, precisão e reconhecimento de fuso horário. A partir do .NET Framework versão 3.5 Service Pack (SP) 1, o Provedor de Dados do .NET Framework para SQL Server (System.Data.SqlClient) fornece suporte total para todos os novos recursos do Mecanismo de Banco de Dados do SQL Server 2008. Você deve instalar o .NET Framework 3.5 SP1 (ou posterior) para usar esses novos recursos com SqlClient.
As versões do SQL Server anteriores ao SQL Server 2008 tinham apenas dois tipos de dados para trabalhar com valores de data e hora: datetime e smalldatetime. Ambos os tipos de dados contêm o valor de data e um valor de hora, o que dificulta o trabalho apenas com valores de data ou hora. Além disso, esses tipos de dados suportam apenas datas que ocorrem após a introdução do calendário gregoriano na Inglaterra, em 1753. Outra limitação é que esses tipos de dados mais antigos não reconhecem fuso horário, o que dificulta o trabalho com dados originários de vários fusos horários.
Para obter mais informações sobre tipos de data e hora no SQL Server, consulte Tipos de dados de data e hora e funções.
Tipos de dados de data/hora introduzidos no SQL Server 2008
A tabela a seguir descreve os novos tipos de dados de data e hora.
| Tipo de dados do SQL Server | Descrição |
|---|---|
date |
O date tipo de dados tem um intervalo de 1 de janeiro de 01 a 31 de dezembro de 9999 com uma precisão de 1 dia. O valor padrão é 1º de janeiro de 1900. O tamanho do armazenamento é de 3 bytes. |
time |
O time tipo de dados armazena apenas valores de tempo, com base em um relógio de 24 horas. O time tipo de dados tem um intervalo de 00:00:00.0000000 até 23:59:59.9999999 com uma precisão de 100 nanossegundos. O valor padrão é 00:00:00.0000000 (meia-noite). O time tipo de dados suporta precisão de segundo fracionária definida pelo usuário e o tamanho do armazenamento varia de 3 a 6 bytes, com base na precisão especificada. |
datetime2 |
O datetime2 tipo de dados combina o intervalo e a date precisão dos tipos de dados e time em um único tipo de dados.Os valores padrão e os formatos literais de cadeia de caracteres são os mesmos definidos nos date tipos de dados e time . |
datetimeoffset |
O datetimeoffset tipo de dados tem todos os recursos de com um deslocamento de datetime2 fuso horário adicional. O deslocamento de fuso horário é representado como [+|-] HH:MM. HH são 2 dígitos que variam de 00 a 14 que representam o número de horas no deslocamento de fuso horário. MM são 2 dígitos que variam de 00 a 59 que representam o número de minutos adicionais no deslocamento de fuso horário. Os formatos de tempo são suportados até 100 nanossegundos. O sinal obrigatório + ou - indica se o deslocamento de fuso horário é adicionado ou subtraído do UTC (Universal Time Coordinate ou Greenwich Mean Time) para obter a hora local. |
Nota
Para obter mais informações sobre como usar a Type System Version palavra-chave, consulte ConnectionString.
Formato de data e ordem de data
A forma como o SQL Server analisa os valores de data e hora depende não apenas da versão do sistema de tipo e da versão do servidor, mas também das configurações padrão de idioma e formato do servidor. Uma cadeia de caracteres de data que funciona para os formatos de data de um idioma pode ficar irreconhecível se a consulta for executada por uma conexão que usa um idioma diferente e uma configuração de formato de data.
A instrução Transact-SQL SET LANGUAGE define implicitamente o DATEFORMAT que determina a ordem das partes de data. Você pode usar a instrução SET DATEFORMAT Transact-SQL em uma conexão para desambiguar valores de data ordenando as partes de data na ordem MDY, DMY, YMD, YDM, MYD ou DYM.
Se você não especificar nenhum formato DATEFORMAT para a conexão, o SQL Server usará o idioma padrão associado à conexão. Por exemplo, uma sequência de data de '01/02/03' seria interpretada como MDY (2 de janeiro de 2003) em um servidor com uma configuração de idioma de inglês dos Estados Unidos e como DMY (1º de fevereiro de 2003) em um servidor com uma configuração de idioma de inglês britânico. O ano é determinado usando a regra de ano de corte do SQL Server, que define a data de corte para atribuir o valor do século. Para obter mais informações, consulte Opção de corte de ano de dois dígitos.
Nota
O formato de data YDM não é suportado ao converter de um formato de cadeia de caracteres para date, time, datetime2, ou datetimeoffset.
Para obter mais informações sobre como o SQL Server interpreta dados de data e hora, consulte Usando dados de data e hora.
Tipos de dados e parâmetros de data/hora
As enumerações a seguir foram adicionadas para dar suporte aos SqlDbType novos tipos de dados de data e hora.
SqlDbType.DateSqlDbType.TimeSqlDbType.DateTime2SqlDbType.DateTimeOffSet
Você pode especificar o tipo de dados de a SqlParameter usando uma das enumerações anteriores SqlDbType .
Nota
Não é possível definir a DbType propriedade de a SqlParameter como SqlDbType.Date.
Você também pode especificar o tipo de um SqlParameter genericamente definindo a DbType propriedade de um SqlParameter objeto para um valor de enumeração específico DbType . Os seguintes valores de enumeração foram adicionados para dar suporte DbType aos datetime2 tipos de dados e datetimeoffset :
DbType.DateTime2
DbType.DateTimeOffset
Essas novas enumerações complementam o Date, Timee DateTime enumerações, que existiam em versões anteriores do .NET Framework.
O tipo de provedor de dados do .NET Framework de um objeto de parâmetro é inferido do tipo .NET Framework do valor do objeto de parâmetro ou do DbType objeto de parâmetro. Não foram introduzidos novos System.Data.SqlTypes tipos de dados para suportar os novos tipos de dados de data e hora. A tabela a seguir descreve os mapeamentos entre os tipos de dados de data e hora do SQL Server 2008 e os tipos de dados CLR.
| Tipo de dados do SQL Server | Tipo do .NET Framework | System.Data.SqlDbType | System.Data.DbType |
|---|---|---|---|
| data | System.DateTime | Data | Data |
| hora | System.TimeSpan | Hora | Hora |
| datetime2 | System.DateTime | DateTime2 | DateTime2 |
| datetimeoffset | System.DateTimeOffset | Desvio de Data e Hora | Desvio de Data e Hora |
| datetime | System.DateTime | Data e Hora | Data e Hora |
| PequenoDateTime | System.DateTime | Data e Hora | Data e Hora |
SqlParameter Propriedades
A tabela a seguir descreve SqlParameter as propriedades que são relevantes para os tipos de dados de data e hora.
| Propriedade | Descrição |
|---|---|
| IsNullable | Obtém ou define se um valor é anulável. Quando você envia um valor de parâmetro nulo para o servidor, você deve especificar DBNull, em vez de null (Nothing no Visual Basic). Para obter mais informações sobre nulos de banco de dados, consulte Manipulando valores nulos. |
| Precision | Obtém ou define o número máximo de dígitos usados para representar o valor. Essa configuração é ignorada para tipos de dados de data e hora. |
| Scale | Obtém ou define o número de casas decimais para as quais a parte de tempo do valor é resolvida para Time, DateTime2,e DateTimeOffset. O valor padrão é 0, o que significa que a escala real é inferida a partir do valor e enviada para o servidor. |
| Size | Ignorado para tipos de dados de data e hora. |
| Value | Obtém ou define o valor do parâmetro. |
| SqlValue | Obtém ou define o valor do parâmetro. |
Nota
Valores de tempo inferiores a zero ou superiores ou iguais a 24 horas lançarão um ArgumentException.
Criação de parâmetros
Você pode criar um SqlParameter objeto usando seu construtor ou adicionando-o a uma SqlCommandParameters coleção chamando o Add método do SqlParameterCollection. O Add método tomará como entrada argumentos do construtor ou um objeto de parâmetro existente.
As próximas seções deste tópico fornecem exemplos de como especificar parâmetros de data e hora. Para obter exemplos adicionais de como trabalhar com parâmetros, consulte Configurando parâmetros e tipos de dados de parâmetros e parâmetros DataAdapter.
Exemplo de data
O fragmento de código a seguir demonstra como especificar um date parâmetro.
SqlParameter parameter = new SqlParameter();
parameter.ParameterName = "@Date";
parameter.SqlDbType = SqlDbType.Date;
parameter.Value = "2007/12/1";
Dim parameter As New SqlParameter()
parameter.ParameterName = "@Date"
parameter.SqlDbType = SqlDbType.Date
parameter.Value = "2007/12/1"
Exemplo de tempo
O fragmento de código a seguir demonstra como especificar um time parâmetro.
SqlParameter parameter = new SqlParameter();
parameter.ParameterName = "@time";
parameter.SqlDbType = SqlDbType.Time;
parameter.Value = DateTime.Parse("23:59:59").TimeOfDay;
Dim parameter As New SqlParameter()
parameter.ParameterName = "@Time"
parameter.SqlDbType = SqlDbType.Time
parameter.Value = DateTime.Parse("23:59:59").TimeOfDay;
Exemplo de Datetime2
O fragmento de código a seguir demonstra como especificar um datetime2 parâmetro com as partes de data e hora.
SqlParameter parameter = new SqlParameter();
parameter.ParameterName = "@Datetime2";
parameter.SqlDbType = SqlDbType.DateTime2;
parameter.Value = DateTime.Parse("1666-09-02 1:00:00");
Dim parameter As New SqlParameter()
parameter.ParameterName = "@Datetime2"
parameter.SqlDbType = SqlDbType.DateTime2
parameter.Value = DateTime.Parse("1666-09-02 1:00:00");
Exemplo de DateTimeOffSet
O fragmento de código a seguir demonstra como especificar um DateTimeOffSet parâmetro com uma data, uma hora e um deslocamento de fuso horário de 0.
SqlParameter parameter = new SqlParameter();
parameter.ParameterName = "@DateTimeOffSet";
parameter.SqlDbType = SqlDbType.DateTimeOffSet;
parameter.Value = DateTimeOffset.Parse("1666-09-02 1:00:00+0");
Dim parameter As New SqlParameter()
parameter.ParameterName = "@DateTimeOffSet"
parameter.SqlDbType = SqlDbType.DateTimeOffSet
parameter.Value = DateTimeOffset.Parse("1666-09-02 1:00:00+0");
AddWithValue
Você também pode fornecer parâmetros usando o AddWithValue método de um SqlCommand, conforme mostrado no fragmento de código a seguir. No entanto, o AddWithValue método não permite que você especifique o DbType ou SqlDbType para o parâmetro.
command.Parameters.AddWithValue(
"@date", DateTimeOffset.Parse("16660902"));
command.Parameters.AddWithValue( _
"@date", DateTimeOffset.Parse("16660902"))
O @date parâmetro pode ser mapeado para um , date, ou datetime tipo de datetime2dados no servidor. Ao trabalhar com os novos datetime tipos de dados, você deve definir explicitamente a propriedade do SqlDbType parâmetro para o tipo de dados da instância. Usar Variant ou fornecer implicitamente valores de parâmetros pode causar problemas com a compatibilidade com versões anteriores com os datetime tipos de dados e smalldatetime .
A tabela a seguir mostra quais SqlDbTypes são inferidos a partir de quais tipos de CLR:
| Tipo CLR | SqlDbType inferido |
|---|---|
| Data e Hora | SqlDbType.DateTime |
| Intervalo de Tempo | SqlDbType.Time |
| Desvio de Data e Hora | SqlDbType.DateTimeOffset |
Recuperando dados de data e hora
A tabela a seguir descreve métodos usados para recuperar valores de data e hora do SQL Server 2008.
| Método SqlClient | Descrição |
|---|---|
| GetDateTime | Recupera o valor da coluna especificada como uma DateTime estrutura. |
| GetDateTimeOffset | Recupera o valor da coluna especificada como uma DateTimeOffset estrutura. |
| GetProviderSpecificFieldType | Retorna o tipo que é o tipo específico do provedor subjacente para o campo. Retorna os mesmos tipos que GetFieldType para novos tipos de data e hora. |
| GetProviderSpecificValue | Recupera o valor da coluna especificada. Retorna os mesmos tipos que GetValue para os novos tipos de data e hora. |
| GetProviderSpecificValues | Recupera os valores na matriz especificada. |
| GetSqlString | Recupera o valor da coluna como um SqlStringarquivo . An InvalidCastException ocorre se os dados não puderem ser expressos como um SqlStringarquivo . |
| GetSqlValue | Recupera dados da coluna como padrão SqlDbType. Retorna os mesmos tipos que GetValue para os novos tipos de data e hora. |
| GetSqlValues | Recupera os valores na matriz especificada. |
| GetString | Recupera o valor da coluna como uma cadeia de caracteres se a Versão do Sistema de Tipo estiver definida como SQL Server 2005. Um InvalidCastException ocorre se os dados não podem ser expressos como uma cadeia de caracteres. |
| GetTimeSpan | Recupera o valor da coluna especificada como uma TimeSpan estrutura. |
| GetValue | Recupera o valor da coluna especificada como seu tipo CLR subjacente. |
| GetValues | Recupera valores de coluna em uma matriz. |
| GetSchemaTable | Retorna um DataTable que descreve os metadados do conjunto de resultados. |
Nota
Não há suporte para a nova data e hora SqlDbTypes para o código que está sendo executado em processo no SQL Server. Uma exceção será gerada se um desses tipos for passado para o servidor.
Especificando valores de data e hora como literais
Pode especificar tipos de dados de data e hora usando uma variedade de formatos literais de string, que o SQL Server depois avalia em tempo de execução, convertendo-os para estruturas internas de data/hora. O SQL Server reconhece dados de data e hora entre aspas simples ('). Os exemplos a seguir demonstram alguns formatos:
Formatos de data alfabéticos, como
'October 15, 2006'.Formatos numéricos de data, como
'10/15/2006'.Formatos de cadeia de caracteres não separados, como
'20061015', que seriam interpretados como 15 de outubro de 2006 se você estiver usando o formato de data padrão ISO.
Valores de tempo inferiores a zero ou superiores ou iguais a 24 horas lançarão um ArgumentException.
Recursos de documentos do SQL Server
Para obter mais informações sobre como trabalhar com valores de data e hora no SQL Server, consulte os seguintes artigos.
| Artigo | Descrição |
|---|---|
| Tipos de dados e funções de data e hora (Transact-SQL) | Fornece uma visão geral de todos os tipos de dados e funções de data e hora do Transact-SQL. |
| Usando dados de data e hora | Fornece informações sobre os tipos de dados de data e hora e funções e exemplos de como usá-los. |
| Tipos de dados (Transact-SQL) | Descreve os tipos de dados do sistema no SQL Server. |