Mais

Converter campo DateTime para Just Date na expressão de rótulo


Tenho um campo DateTime (ex: CreatedDate) e gostaria de mostrar apenas a data com o rótulo. Como eu configuraria a expressão de rótulo para fazer isso usando python?


É engraçado que o interpretador python (calculadora de campo) trate os campos datetime do Arcgis como textos Unicode. para extrair a data dessa string, devemos convertê-la em datetime e, em seguida, extrair a data e, em seguida, converter em string!

Código autônomo (supondo que você tenha uma data e hora formatada como08/10/2015 03:24:53 AM):

print str (datetime.datetime.strptime (u'10 / 8/2015 3:24:53 AM ', "% m /% d /% Y% H:% M:% S% p"). data ())

expressão de rótulo (analisador python):

def FindLabel ([DateModified]): return str (datetime.datetime.strptime ([DateModified], "% m /% d /% Y% H:% M:% S% p"). date ())

A data em um campo DateTime são os primeiros 10 caracteres do campo.

Tentei o seguinte em um campo chamado last_edited_date.

Em sua expressão de rótulo, defina seu analisador para Python.

Marque a caixa Avançado e defina sua expressão da seguinte forma:

def FindLabel ([last_edited_date]): return [last_edited_date] [: 10]

E mudar last_edited_date para o que quer que seu campo seja chamado. A chave aqui é usar a capacidade de fatiar string do python. Isso é, [:10] para obter os primeiros 10 caracteres do campo.

Os resultados são assim:


Formate um campo de data e hora

Os tipos de dados de data e hora têm uma ampla variedade de formatos para ajudar a atender às suas circunstâncias exclusivas. Ao formatar, você tem três opções: manter os formatos padrão, aplicar um formato predefinido ou criar um formato personalizado. Quando você aplica um formato a um campo de tabela, esse mesmo formato é automaticamente aplicado a qualquer formulário ou controle de relatório que você vincular subsequentemente a esse campo de tabela. A formatação altera apenas a forma como os dados são exibidos e não afeta como os dados são armazenados ou como os usuários podem inserir dados.


5 respostas 5

Isso parece funcionar e manter a precisão também:

O CAST em DATETIME2 (7) converte o valor TIME (7) (@T) em DATETIME2 onde a parte da data é '1900-01-01', que é o valor padrão dos tipos de data e data e hora (consulte datetime2 e o comentário * na página CAST e CONVERT no MSDN.)

*. Quando os dados de caractere que representam apenas a data ou apenas os componentes de tempo são convertidos para os tipos de dados datetime ou smalldatetime, o componente de tempo não especificado é definido como 00: 00: 00.000, e o componente de data não especificado é definido como 01/01/1900.

As funções DATEADD () e DATEDIFF () cuidam do resto, ou seja, adicionando a diferença em dias entre 01/01/1900 e o valor DATE (@D).

Conforme observado por @Quandary, a expressão acima é considerada não determinística pelo SQL Server. Se quisermos uma expressão determinística, digamos porque ela deve ser usada para uma coluna PERSISTED, '19000101' ** precisa ser substituído por 0 ou CONVERT (DATE, '19000101', 112):

**: DATEDIFF (day, '19000101', d) não é determinístico, pois faz uma conversão implícita da string para DATETIME e as conversões de strings para datetime são determinísticas apenas quando estilos específicos são usados.


11 Respostas 11

Se o tipo de coluna for DateTime no SQL, ele armazenará um horário onde você passa um ou não.

Seria melhor salvar a data corretamente:

e formate-o quando precisar exibi-lo:

Ou se você estiver usando o EditorFor:

Para adicionar uma propriedade ao seu modelo, adicione este código:

Só quero esclarecer para esta resposta que, ao dizer 'Se você estiver usando EditorFor', significa que você precisa ter um modelo EditorFor para o tipo de valor que está tentando representar.

Modelos de editor são uma maneira legal de gerenciar controles repetitivos em MVC:

Você pode usá-los para tipos ingênuos como String como fiz acima, mas eles são especialmente ótimos para permitir que você crie um modelo de um conjunto de campos de entrada para um tipo de dados mais complicado.

Só tive que lidar com esse cenário sozinho - encontrei uma maneira realmente fácil de fazer isso, basta anotar sua propriedade no modelo assim:

Ele também ocultará o botão de hora do selecionador de data.

Desculpe se esta resposta está um pouco atrasada)

Isso funciona se você deseja exibir em um TextBox:

A data / hora na data base não será um formatado versão em tudo. Será apenas a própria data / hora. Como você exibição aquela data / hora em que você extrai o valor do banco de dados é uma questão diferente. Suspeito fortemente que você realmente só deseja:

Sim, se você olhar para o banco de dados usando o SQL Server Studio ou qualquer outro, você verá agora a meia-noite - mas isso é irrelevante, e quando você busca a data do banco de dados e a exibe para um usuário, então você pode aplicar o formato relevante.

EDIT: Em relação à sua questão editada, o problema não é com o modelo - é como você especifica a visualização. Você deve usar algo como:

onde d é o especificador de formato de data e hora padrão para o padrão de data abreviada (o que significa que levará as configurações culturais atuais em consideração).

Essa é a parte que venho dizendo repetidamente - que quando você exibir a data / hora para o usuário, essa é a hora de formatar como uma data sem hora.

EDITAR: Se isso não funcionar, deve haver uma maneira de decorar o modelo ou visualização com uma string de formato - ou algo parecido. Não sou realmente uma pessoa MVC, mas parece que há deveria para ser uma boa maneira de fazer isso declarativamente.


Funções de data e hora no SQL padrão

Todas as saídas são formatadas automaticamente de acordo com a ISO 8601, separando a data e a hora com um T.

CURRENT_DATETIME

Descrição

Retorna a hora atual como um objeto DATETIME. Os parênteses são opcionais quando chamados sem argumentos.

Esta função oferece suporte a um parâmetro de fuso horário opcional. Consulte Definições de fuso horário para obter informações sobre como especificar um fuso horário.

Tipo de Retorno de Dados

Quando uma coluna chamada current_datetime está presente, o nome da coluna e a chamada de função sem parênteses são ambíguos. Para garantir a chamada de função, adicione parênteses para garantir o nome da coluna, qualifique-o com sua variável de intervalo. Por exemplo, a consulta a seguir selecionará a função na coluna now e a coluna da tabela na coluna current_datetime.

DATA HORA

Descrição

  1. Constrói um objeto DATETIME usando valores INT64 que representam o ano, mês, dia, hora, minuto e segundo.
  2. Constrói um objeto DATETIME usando um objeto DATE e um objeto TIME opcional.
  3. Constrói um objeto DATETIME usando um objeto TIMESTAMP. Ele suporta um parâmetro opcional para especificar um fuso horário. Se nenhum fuso horário for especificado, o fuso horário padrão, UTC, será usado.

Tipo de Retorno de Dados

EXTRAIR

Descrição

Retorna um valor que corresponde à parte especificada de uma datetime_expression fornecida.

  • MICROSEGUNDO
  • MILISSEGUNDO
  • SEGUNDO
  • MINUTO
  • HORA
  • DIA DA SEMANA
  • DIA
  • DAYOFYEAR
  • WEEK: Retorna o número da semana da data no intervalo [0, 53]. As semanas começam no domingo e as datas anteriores ao primeiro domingo do ano estão na semana 0.
  • WEEK (& ltWEEKDAY & gt): Retorna o número da semana de datetime_expression no intervalo [0, 53]. As semanas começam no WEEKDAY. datetime s anteriores ao primeiro WEEKDAY do ano estão na semana 0. Os valores válidos para WEEKDAY são DOMINGO, SEGUNDA-FEIRA, TERÇA-FEIRA, QUARTA-FEIRA, QUINTA-FEIRA, SEXTA-FEIRA e SÁBADO.
  • ISOWEEK: Retorna o número da semana ISO 8601 de datetime_expression. ISOWEEK começa na segunda-feira. Os valores de retorno estão no intervalo [1, 53]. A primeira ISOWEEK de cada ano ISO começa na segunda-feira antes da primeira quinta-feira do ano do calendário gregoriano.
  • MÊS
  • TRIMESTRE
  • ANO
  • ISOYEAR: Retorna o ano de numeração da semana ISO 8601, que é o ano do calendário gregoriano contendo a quinta-feira da semana à qual date_expression pertence.
  • DATA
  • TEMPO

Os valores retornados truncam os períodos de tempo de ordem inferior. Por exemplo, ao extrair segundos, EXTRACT trunca os valores de milissegundos e microssegundos.

Tipo de Retorno de Dados

INT64, exceto nos seguintes casos:

No exemplo a seguir, EXTRACT retorna um valor correspondente à parte do tempo HORA.

No exemplo a seguir, EXTRACT retorna valores correspondentes a diferentes partes de tempo de uma coluna de data / hora.

No exemplo a seguir, datetime_expression cai em um domingo. EXTRACT calcula a primeira coluna usando semanas que começam no domingo e calcula a segunda coluna usando semanas que começam na segunda-feira.

DATETIME_ADD

Descrição

Adiciona unidades int64_expression de parte ao objeto DATETIME.

DATETIME_ADD suporta os seguintes valores para part:

  • MICROSEGUNDO
  • MILISSEGUNDO
  • SEGUNDO
  • MINUTO
  • HORA
  • DIA
  • SEMANA . Equivalente a 7 DIAS.
  • MÊS
  • TRIMESTRE
  • ANO

É necessário um manuseio especial para as partes MÊS, TRIMESTRE e ANO quando a data for no (ou próximo) último dia do mês. Se o mês resultante tiver menos dias do que DATETIME & # 39s dia original, o dia resultante será o último dia do novo mês.

Tipo de Retorno de Dados

DATETIME_SUB

Descrição

Subtrai unidades int64_expression de parte de DATETIME.

DATETIME_SUB suporta os seguintes valores para part:

  • MICROSEGUNDO
  • MILISSEGUNDO
  • SEGUNDO
  • MINUTO
  • HORA
  • DIA
  • SEMANA . Equivalente a 7 DIAS.
  • MÊS
  • TRIMESTRE
  • ANO

É necessário um manuseio especial para as partes MÊS, TRIMESTRE e ANO quando a data for no (ou próximo) último dia do mês. Se o mês resultante tiver menos dias do que DATETIME & # 39s dia original, o dia resultante será o último dia do novo mês.

Tipo de Retorno de Dados

DATETIME_DIFF

Descrição

Retorna o número de intervalos de parte inteiros especificados entre dois objetos DATETIME (datetime_expression_a - datetime_expression_b). Se o primeiro DATETIME for anterior ao segundo, a saída será negativa. Lança um erro se o cálculo estourar o tipo de resultado, como se a diferença em microssegundos entre os dois objetos DATETIME estourasse um valor INT64.

DATETIME_DIFF suporta os seguintes valores para part:

  • MICROSEGUNDO
  • MILISSEGUNDO
  • SEGUNDO
  • MINUTO
  • HORA
  • DIA
  • SEMANA: Esta parte da data começa no domingo.
  • WEEK (& ltWEEKDAY & gt): Esta parte da data começa no WEEKDAY. Os valores válidos para WEEKDAY são DOMINGO, SEGUNDA-FEIRA, TERÇA-FEIRA, QUARTA-FEIRA, QUINTA-FEIRA, SEXTA-FEIRA e SÁBADO.
  • ISOWEEK: Usa limites da semana ISO 8601. Semanas ISO começam na segunda-feira.
  • MÊS
  • TRIMESTRE
  • ANO
  • ISOYEAR: Usa o limite de ano de numeração da semana ISO 8601. O limite do ano ISO é a segunda-feira da primeira semana cuja quinta-feira pertence ao ano do calendário gregoriano correspondente.

Tipo de Retorno de Dados

O exemplo acima mostra o resultado de DATETIME_DIFF para dois DATETIME s com 24 horas de intervalo. DATETIME_DIFF com a parte WEEK retorna 1 porque DATETIME_DIFF conta o número de limites de parte neste intervalo de DATETIME s. Cada SEMANA começa no domingo, portanto, há um limite parcial entre sábado, 14-10-2017 00:00:00 e domingo, 15-10-2017 00:00:00.

O exemplo a seguir mostra o resultado de DATETIME_DIFF para duas datas em anos diferentes. DATETIME_DIFF com a parte da data YEAR retorna 3 porque conta o número de limites do ano do calendário gregoriano entre os dois DATETIME s. DATETIME_DIFF com a parte da data ISOYEAR retorna 2 porque a segunda DATETIME pertence ao ano ISO 2015. A primeira quinta-feira do ano civil de 2015 foi 2015-01-01, então o ano ISO 2015 começa na segunda-feira anterior, 2014-12-29 .

O exemplo a seguir mostra o resultado de DATETIME_DIFF por dois dias consecutivos. A primeira data cai em uma segunda-feira e a segunda data cai em um domingo. DATETIME_DIFF com a parte da data WEEK retorna 0 porque esta parte do tempo usa semanas que começam no domingo. DATETIME_DIFF com a parte da data WEEK (MONDAY) retorna 1. DATETIME_DIFF com a parte da data ISOWEEK também retorna 1 porque as semanas ISO começam na segunda-feira.

DATETIME_TRUNC

Descrição

Trunca um objeto DATETIME para a granularidade de parte.

DATETIME_TRUNC suporta os seguintes valores para part:

  • MICROSEGUNDO
  • MILISSEGUNDO
  • SEGUNDO
  • MINUTO
  • HORA
  • DIA
  • SEMANA
  • WEEK (& ltWEEKDAY & gt): Trunca datetime_expression para o limite da semana anterior, onde as semanas começam em WEEKDAY. Os valores válidos para WEEKDAY são DOMINGO, SEGUNDA-FEIRA, TERÇA-FEIRA, QUARTA-FEIRA, QUINTA-FEIRA, SEXTA-FEIRA e SÁBADO.
  • ISOWEEK: Trunca datetime_expression para o limite da semana ISO 8601 anterior. ISOWEEK começa na segunda-feira. A primeira ISOWEEK de cada ano ISO contém a primeira quinta-feira do ano do calendário gregoriano correspondente. Qualquer expressão_de_data anterior a isso será truncada para a segunda-feira anterior.
  • MÊS
  • TRIMESTRE
  • ANO
  • ISOYEAR: Trunca datetime_expression para o limite de ano de numeração da semana ISO 8601 anterior. O limite do ano ISO é a segunda-feira da primeira semana cuja quinta-feira pertence ao ano do calendário gregoriano correspondente.

Tipo de Retorno de Dados

No exemplo a seguir, o DATETIME original cai em um domingo. Como a parte é WEEK (SEGUNDA-FEIRA), DATE_TRUNC retorna DATEHORA da segunda-feira anterior.

No exemplo a seguir, a datetime_expression original está no ano do calendário gregoriano de 2015. No entanto, DATETIME_TRUNC com a parte da data ISOYEAR trunca a datetime_expression para o início do ano ISO, não o ano do calendário gregoriano. A primeira quinta-feira do ano civil de 2015 foi 01-01-2015, então o ano ISO 2015 começa na segunda-feira anterior, 29-12-2014. Portanto, o limite do ano ISO anterior a datetime_expression 2015-06-15 00:00:00 é 2014-12-29.

FORMAT_DATETIME

Descrição

Formata um objeto DATETIME de acordo com o format_string especificado. Consulte Elementos de formato com suporte para DATETIME para obter uma lista de elementos de formato que esta função suporta.

Tipo de Retorno de Dados

ÚLTIMO DIA

Descrição

Retorna o último dia de uma expressão datetime que contém a data. Isso é comumente usado para retornar o último dia do mês.

Você pode opcionalmente especificar a parte da data para a qual o último dia é retornado. Se este parâmetro não for usado, o valor padrão é MONTH. LAST_DAY suporta os seguintes valores para date_part:

  • ANO
  • TRIMESTRE
  • MÊS
  • SEMANA . Equivalente a 7 DIAS.
  • WEEK (& ltWEEKDAY & gt). & ltWEEKDAY & gt representa o dia de início da semana. Os valores válidos são SUNDAY, SEGUNDA-FEIRA, TERÇA-FEIRA, QUARTA-FEIRA, QUINTA-FEIRA, SEXTA-FEIRA e SÁBADO.
  • ISOWEEK. Usa limites de semanas ISO 8601. Semanas ISO começam na segunda-feira.
  • ISOYEAR. Usa o limite de ano de numeração da semana ISO 8601. O limite do ano ISO é a segunda-feira da primeira semana cuja quinta-feira pertence ao ano do calendário gregoriano correspondente.

Tipo de Retorno de Dados

Ambos retornam o último dia do mês:

Isso retorna o último dia do ano:

Isso retorna o último dia da semana para uma semana que começa em um domingo:

Isso retorna o último dia da semana para uma semana que começa na segunda-feira:

PARSE_DATETIME

Descrição

format_string contém os elementos de formato que definem como datetime_string é formatado. Cada elemento em datetime_string deve ter um elemento correspondente em format_string. A localização de cada elemento em format_string deve corresponder à localização de cada elemento em datetime_string.

A string de formato suporta totalmente a maioria dos elementos de formato, exceto% Q,% a,% A,% g,% G,% j,% P,% u,% U,% V,% w e% W.

PARSE_DATETIME analisa string de acordo com as seguintes regras:

  • Campos não especificados. Qualquer campo não especificado é inicializado em 1970-01-01 00: 00: 00.0. Por exemplo, se o ano não for especificado, o padrão é 1970.
  • Nomes que não diferenciam maiúsculas de minúsculas. Nomes, como segunda-feira e fevereiro, não diferenciam maiúsculas de minúsculas.
  • Espaço em branco. Um ou mais espaços em branco consecutivos na string de formato correspondem a zero ou mais espaços em branco consecutivos na string DATETIME. Espaços em branco à esquerda e à direita na string DATETIME são sempre permitidos, mesmo se não estiverem na string de formato.
  • Precedência de formato. Quando dois ou mais elementos de formato têm informações sobrepostas, o último geralmente substitui os anteriores, com algumas exceções. Por exemplo,% F e% Y afetam o ano, portanto, o elemento anterior substitui o posterior. Veja as descrições de% s,% C e% y em Elementos de formato com suporte para DATETIME.

Tipo de Retorno de Dados

Os exemplos a seguir analisam um literal STRING como DATETIME.

O exemplo a seguir analisa um literal STRING contendo uma data em um formato de linguagem natural como DATETIME.

Elementos de formato suportados para DATETIME

Salvo indicação em contrário, as funções DATETIME que usam strings de formato suportam os seguintes elementos:

Elemento de formato Descrição Exemplo
%UMA O nome completo do dia da semana. quarta-feira
%uma O nome abreviado do dia da semana. Casar
% B O nome completo do mês. Janeiro
% b ou% h O nome abreviado do mês. Jan
% C O século (um ano dividido por 100 e truncado para um número inteiro) como um número decimal (00-99). 20
% c A representação de data e hora. Quarta, 20 de janeiro 21:47:00 2021
% D A data no formato% m /% d /% y. 01/20/21
% d O dia do mês como um número decimal (01-31). 20
% e O dia do mês como um número decimal (1-31) dígitos únicos são precedidos por um espaço. 20
% F A data no formato% Y-% m-% d. 2021-01-20
% G O ano ISO 8601 com século como número decimal. Cada ano ISO começa na segunda-feira antes da primeira quinta-feira do ano do calendário gregoriano. Observe que% G e% Y podem produzir resultados diferentes perto dos limites do ano gregoriano, onde o ano gregoriano e o ano ISO podem divergir. 2021
% g O ano ISO 8601 sem século como número decimal (00-99). Cada ano ISO começa na segunda-feira antes da primeira quinta-feira do ano do calendário gregoriano. Observe que% ge% y podem produzir resultados diferentes perto dos limites do ano gregoriano, onde o ano gregoriano e o ano ISO podem divergir. 21
% H A hora (relógio de 24 horas) como um número decimal (00-23). 21
%EU A hora (relógio de 12 horas) como um número decimal (01-12). 09
% j O dia do ano como um número decimal (001-366). 020
% k A hora (relógio de 24 horas) como um número decimal (0-23), os dígitos únicos são precedidos por um espaço. 21
%eu A hora (relógio de 12 horas) como um número decimal (1-12), os dígitos únicos são precedidos por um espaço. 9
% M O minuto como um número decimal (00-59).
% m O mês como um número decimal (01-12). 01
% n Um caractere de nova linha.
% P Ou da manhã ou da tarde. PM
% p AM ou PM. PM
% Q O trimestre como um número decimal (1-4). 1
% R A hora no formato% H:% M. 21:47
% r O relógio de 12 horas usando a notação AM / PM. 21:47:00
% S O segundo como um número decimal (00-60). 00
% s O número de segundos desde 01/01/1970 00:00:00. Sempre substitui todos os outros elementos de formato, independentemente de onde% s apareça na string. Se vários elementos% s aparecerem, o último terá precedência. 1611179220
% T A hora no formato% H:% M:% S. 21:47:00
% t Um caractere de tabulação.
%VOCÊ O número da semana do ano (domingo como primeiro dia da semana) como um número decimal (00-53). 03
%você O dia da semana (segunda-feira como o primeiro dia da semana) como um número decimal (1-7). 3
% V O número da semana ISO 8601 do ano (segunda-feira como o primeiro dia da semana) como um número decimal (01-53). Se a semana que contém 1º de janeiro tiver quatro ou mais dias no ano novo, é a semana 1, caso contrário, é a semana 53 do ano anterior e a semana seguinte é a semana 1. 03
%C O número da semana do ano (segunda-feira como o primeiro dia da semana) como um número decimal (00-53). 03
%C O dia da semana (domingo como primeiro dia da semana) como um número decimal (0-6). 3
% X A representação de tempo no formato HH: MM: SS. 21:47:00
% x A representação da data no formato MM / DD / AA. 01/20/21
% Y O ano com século como número decimal. 2021
% y O ano sem o século como um número decimal (00-99), com um zero à esquerda opcional. Pode ser misturado com% C. Se% C não for especificado, os anos 00-68 são 2000s, enquanto os anos 69-99 são 1900s. 21
%% Um único caractere%. %
% E # S Segundos com # dígitos de precisão fracionária. 00.000
% E * S Segundos com precisão fracionária total (um literal '*'). 00
% E4Y Anos de quatro caracteres (0001. 9999). Observe que% Y produz quantos caracteres forem necessários para renderizar totalmente o ano. 2021

Exceto quando indicado de outra forma, o conteúdo desta página está licenciado pela Licença Creative Commons Atribuição 4.0, e os exemplos de código são licenciados pela Licença Apache 2.0. Para obter detalhes, consulte as políticas de sites para desenvolvedores do Google. Java é uma marca registrada da Oracle e / ou de suas afiliadas.


Os métodos que você pode usar para passar representações de string de valores de data / hora entre X ++ e .NET são os seguintes:

System.DateTime.GetDateTimeFormats (Insira um System.Char of s.)

Nem System.Convert :: ToString nem System.DateTime.ToString geram um formato que pode ser inserido por DateTimeUtil :: Parse.

Formato de string ISO para data / hora

O formato de saída de DateTimeUtil :: toStr e System.DateTime.GetDateTimeFormats é aaaa-mm-ddThh: mm: ss no formato de 24 horas (sem AM ou PM à direita), com zeros à esquerda. Por exemplo, 20 de julho de 2007 às 13h45 seria emitido como 2007-07-20T13: 45: 00. Este formato de string é um padrão da International Standards Organization (ISO).

Este formato de string ISO é inserido em DateTimeUtil :: parse e System.DateTime :: Parse. para converter a string em um tipo de data / hora.

Amostra de conversão entre data / hora e string

O exemplo de código X ++ a seguir mostra como cadeias de caracteres compatíveis podem ser transmitidas entre .NET e X ++ e convertidas em variáveis ​​de data / hora.


Sobre as "Dicas de controle de qualidade"

As dicas de controle de qualidade do W3C são documentos curtos que explicam informações úteis para desenvolvedores ou designers da Web, hospedados e produzidos pelo Grupo de Interesse de Garantia de Qualidade do W3C.

Embora as dicas sejam cuidadosamente revisadas pelos participantes do grupo, elas não devem ser vistas como outra coisa que informações de sabedoria e, especialmente, elas são não especificações técnicas normativas do W3C.

Saiba mais sobre as Dicas, como enviar suas próprias pérolas de sabedoria e encontre todas as outras dicas de controle de qualidade no Índice de dicas.

Copyright e cópia 1994-2006 W3C & reg (MIT, ERCIM, Keio), Todos os direitos reservados. As regras de responsabilidade, marca registrada, uso de documentos e licenciamento de software do W3C se aplicam. Suas interações com este site estão de acordo com nossas declarações públicas e de privacidade para membros.


Você não pode obter uma string vazia porque está retornando o tipo de valor DATE de ISNULL.

Retorna o mesmo tipo de check_expression. Se um NULL literal é fornecido como check_expression, retorna o tipo de dados do valor de substituição. Se um NULL literal for fornecido como check_expression e nenhum valor de substituição for fornecido, retorna um int.

Se você estiver verificando se o valor é NULL ou não, não há necessidade de convertê-lo em uma data, a menos que você queira retornar um valor de data (o que parece não ser verdade).

Uma data NULL é NULL (sem valor). Por outro lado, uma string vazia é avaliada como 0, que no SQL Server é implicitamente um número inteiro que representa o número de dias desde 01/01/1900.


Funções de data e hora do Impala

Os tipos de dados do Impala subjacentes para dados de data e hora são TIMESTAMP e DATE.

  • A configuração está desativada por padrão, o que significa que funções como FROM_UNIXTIME () e UNIX_TIMESTAMP () consideram os valores de entrada para sempre representar o fuso horário UTC.
  • A configuração também se aplica quando você CAST () um valor BIGINT para TIMESTAMP ou um valor TIMESTAMP para BIGINT. Quando essa configuração é ativada, essas funções e operações são convertidas de e para valores que representam o fuso horário local. Consulte Tipo de dados TIMESTAMP para obter detalhes sobre como o Impala lida com as considerações de fuso horário para o tipo de dados TIMESTAMP.

Referência de função:

O Impala suporta as seguintes funções de data e hora:

  • ADD_MONTHS
  • ADDDATE
  • DATA ATUAL
  • CURRENT_TIMESTAMP
  • DATE_ADD
  • DATE_PART
  • DATE_SUB
  • DATE_TRUNC
  • DATEDIFF
  • DIA
  • DAYNAME
  • DIA DA SEMANA
  • DAYOFYEAR
  • DAYS_ADD
  • DAYS_SUB
  • EXTRAIR
  • FROM_TIMESTAMP
  • FROM_UNIXTIME
  • FROM_UTC_TIMESTAMP
  • HORA
  • HOURS_ADD
  • HOURS_SUB
  • INT_MONTHS_BETWEEN
  • MICROSECONDS_ADD
  • MICROSECONDS_SUB
  • MILISSEGUNDO
  • MILLISECONDS_ADD
  • MILLISECONDS_SUB
  • MINUTO
  • MINUTES_ADD
  • MINUTES_SUB
  • MÊS
  • MONTHNAME
  • MONTHS_ADD
  • MONTHS_BETWEEN
  • MONTHS_SUB
  • NANOSECONDS_ADD
  • NANOSECONDS_SUB
  • PRÓXIMO DIA
  • AGORA
  • TRIMESTRE
  • SEGUNDO
  • SECONDS_ADD
  • SECONDS_SUB
  • SUBDATE
  • HORA DO DIA
  • TIMESTAMP_CMP
  • ATÉ A PRESENTE DATA
  • TO_TIMESTAMP
  • TO_UTC_TIMESTAMP
  • TRUNC
  • UNIX_TIMESTAMP
  • UTC_TIMESTAMP
  • WEEKOFYEAR
  • WEEKS_ADD
  • WEEKS_SUB
  • ANO
  • YEARS_ADD
  • YEARS_SUB

Notas de uso:

Igual a MONTHS_ADD (). Disponível no Impala 1.4 e superior. Para compatibilidade ao portar código com extensões do fornecedor.

ADDDATE (TIMESTAMP / DATE data, INT / BIGINT dias) Objetivo: Adiciona dias até a data e retorna o novo valor de data.

O valor dos dias pode ser negativo, o que dá o mesmo resultado que a função SUBDATE ().

Quaisquer referências à função CURRENT_DATE () são avaliadas no início de uma consulta. Todas as chamadas para CURRENT_DATE () dentro da mesma consulta retornam o mesmo valor, e o valor não depende de quanto tempo a consulta leva.

Tipo de retorno: DATA

CURRENT_TIMESTAMP () Objetivo: Alias ​​para a função NOW ().

Tipo de retorno: TIMESTAMP

DATE_ADD (TIMESTAMP / DATE data, INT / BIGINT dias), DATE_ADD (TIMESTAMP / DATE data, intervalo_expressão) Objetivo: Adiciona um número especificado de dias ao argumento de data. Com uma expressão INTERVAL como o segundo argumento, você pode calcular um valor delta usando outras unidades, como semanas, anos, horas, segundos e assim por diante, consulte Tipo de dados TIMESTAMP para obter detalhes.

Os exemplos a seguir mostram a notação abreviada de uma expressão INTERVAL, em vez de especificar o número preciso de dias. A notação INTERVAL também permite trabalhar com unidades menores do que um único dia.

Como todas as funções de data / hora que lidam com meses, date_add () lida com datas inexistentes após o final de um mês configurando a data para o último dia do mês. O exemplo a seguir mostra como a data inexistente 31 de abril é normalizada para 30 de abril:

  • 0 se as datas forem idênticas.
  • 1 se data1 e data2.
  • -1 se data1 e data2.
  • NULL se data1 ou data2 for NULL.

Tipo de retorno: INT

DATE_PART (STRING parte, TIMESTAMP / DATE data) Objetivo: Semelhante a EXTRACT (), com a ordem do argumento invertida. Suporta as mesmas unidades de data e hora de EXTRACT (). Para compatibilidade com o código SQL contendo extensões do fornecedor.

Tipo de retorno: BIGINT

DATE_SUB (data de início TIMESTAMP, dias INT), DATE_SUB (data de início TIMESTAMP, expressão_intervalo) Objetivo: Subtrai um número especificado de dias de um valor TIMESTAMP. Com uma expressão INTERVAL como o segundo argumento, você pode calcular um valor delta usando outras unidades, como semanas, anos, horas, segundos e assim por diante, consulte Tipo de dados TIMESTAMP para obter detalhes.

O exemplo a seguir mostra o uso mais simples de subtrair um determinado número de dias de um valor TIMESTAMP:

Os exemplos a seguir mostram a notação abreviada de uma expressão INTERVAL, em vez de especificar o número preciso de dias. A notação INTERVAL também permite trabalhar com unidades menores do que um único dia.

Como todas as funções de data / hora que lidam com meses, date_add () lida com datas inexistentes após o final de um mês configurando a data para o último dia do mês. O exemplo a seguir mostra como a data inexistente 31 de abril é normalizada para 30 de abril:

DATE_TRUNC (unidade STRING, TIMESTAMP / DATE ts) Objetivo: Retorna o valor ts truncado para a unidade especificada.

Argumento: O argumento da unidade não faz distinção entre maiúsculas e minúsculas. Esta string de argumento pode ser uma das seguintes:

Unidade Compatível com TIMESTAMP Suportado por DATE
'MICROSECONDS' sim Não
'MILISSEGUNDOS' sim Não
'SEGUNDO' sim Não
'MINUTO' sim Não
'HORA' sim Não
'DIA' sim sim
'SEMANA' sim sim
'MÊS' sim sim
'ANO' sim sim
'DÉCADA' sim sim
'SÉCULO' sim sim
'MILÊNIO' sim sim

Adicionado em: Impala 2.11.0

Notas de uso:

Embora esta função seja semelhante a chamar TRUNC () com um argumento TIMESTAMP ou DATE, a ordem dos argumentos e as unidades reconhecidas são diferentes entre TRUNC () e DATE_TRUNC (). Portanto, essas funções não são intercambiáveis.

Esta função é normalmente usada em consultas GROUP BY para agregar resultados da mesma hora, dia, semana, mês, trimestre e assim por diante. Você também pode usar esta função em um INSERT. SELECIONE em uma tabela particionada para dividir os valores TIMESTAMP ou DATE na partição correta.

  • TIMESTAMP se o segundo argumento, ts, for TIMESTAMP.
  • DATE se o segundo argumento, ts, for DATE.

DATE_TRUNC ('HOUR', AGORA ()) retorna 2017-12-05 13:00:00.

DATE_TRUNC ('MILLENNIUM', DATE'2019-08-02 ') retorna 01-01-01.

DATEDIFF (TIMESTAMP / DATE enddate, TIMESTAMP / DATE startdate) Objetivo: Retorna o número de dias de startdate a enddate.

Se enddate & gt startdate, o valor de retorno é positivo.

Se enddate & lt startdate, o valor de retorno é negativo.

Se enddate = startdate, o valor de retorno é zero.

Tipo de retorno: INT

Notas de uso:

As partes de tempo dos valores enddate e startdate são ignoradas. Por exemplo, 23h59 em um dia e 12h01 no dia seguinte representam um DATEDIFF () de -1 porque os valores de data / hora representam dias diferentes, embora os valores TIMESTAMP difiram em apenas 2 minutos.

DAY (TIMESTAMP / DATE data), DAYOFMONTH (TIMESTAMP / DATE data) Objetivo: Retorna o valor do dia do argumento de data. O valor representa o dia do mês, portanto, está no intervalo de 1 a 31, ou menos para meses sem 31 dias.

Retorna NULL para datas inexistentes, por exemplo 30 de fevereiro ou strings de data formatadas incorretamente, por exemplo '1999-02-013'.

Tipo de retorno: INT

DAYNAME (data TIMESTAMP / DATE) Objetivo: Retorna o nome do dia do argumento de data. O intervalo de valores de retorno é de 'domingo' a 'sábado'. Usado em consultas de geração de relatório, como uma alternativa para chamar DAYOFWEEK () e transformar esse valor de retorno numérico em uma string usando uma expressão CASE.

Tipo de retorno: FRAGMENTO

DAYOFWEEK (TIMESTAMP / data DATE) Objetivo: Retorna o campo do dia do argumento da data, correspondendo ao dia da semana. O intervalo de valores de retorno é de 1 (domingo) a 7 (sábado).

Tipo de retorno: INT

DAYOFYEAR (TIMESTAMP / DATE data) Objetivo: Retorna o campo do dia do argumento da data, correspondendo ao dia do ano. O intervalo de valores de retorno é de 1 (1º de janeiro) a 366 (31 de dezembro de um ano bissexto).

Tipo de retorno: INT

DAYS_ADD (TIMESTAMP / DATE data, INT / BIGINT dias) Objetivo: Retorna o valor com o número de dias adicionados até a data.

Argumento: O valor do argumento da unidade não faz distinção entre maiúsculas e minúsculas. A string da unidade pode ser uma das seguintes:

Unidade Suportado para TIMESTAMP ts Suportado para DATE ts
'ÉPOCA' sim Não
'MILLISECOND' sim Não
'SEGUNDO' sim Não
'MINUTO' sim Não
'HORA' sim Não
'DIA' sim sim
'MÊS' sim sim
'TRIMESTRE' sim sim
'ANO' sim sim

Notas de uso:

Normalmente usado em consultas GROUP BY para organizar os resultados por hora, dia, mês e assim por diante. Você também pode usar esta função em um INSERT. Instrução SELECT para inserir em uma tabela particionada para dividir os valores TIMESTAMP em partes individuais, se a tabela particionada tiver colunas de chave de partição separadas representando ano, mês, dia e assim por diante. Se você precisar dividir por unidades de tempo mais complexas, como por semana ou por trimestre, use a função TRUNC ().

Tipo de retorno: BIGINT

EXTRACT (DAY FROM DATE'2019-08-17 ') retorna 17.

Se você especificar 'MILLISECOND' para o argumento de unidade, a função retorna o componente de segundos e o componente de milissegundos.

EXTRACT (CAST ('2006-05-12 18: 27: 28.123456789' AS TIMESTAMP), 'MILLISECOND') retorna 28123.

FROM_TIMESTAMP (data e hora TIMESTAMP, padrão STRING), FROM_TIMESTAMP (data e hora STRING, padrão STRING) Objetivo: Converte um valor TIMESTAMP em uma string que representa o mesmo valor.

Tipo de retorno: FRAGMENTO

Notas de uso:

A função FROM_TIMESTAMP () fornece uma maneira flexível de converter valores TIMESTAMP em formatos de string arbitrários para fins de relatório.

Como o Impala converte implicitamente valores de string em TIMESTAMP, você pode passar valores de data / hora representados como strings (no formato padrão aaaa-MM-dd HH: mm: ss.SSS) para esta função. O resultado é uma string que usa caracteres separadores diferentes, ordem dos campos, nomes de meses por extenso ou outra variação da representação da string de data / hora.

Os tokens permitidos para a string de padrão são os mesmos da função FROM_UNIXTIME ().

FROM_UNIXTIME (BIGINT unixtime [, padrão STRING]) Objetivo: Converte o número de segundos da época Unix para a hora especificada em uma string no fuso horário local.

Tipo de retorno: FRAGMENTO

A string padrão suporta o seguinte subconjunto de Java SimpleDateFormat.

Padrão Descrição
y Ano
M Mês
d Dia
H Hora
m Minuto
s Segundo
S Fractional second
+/- hh: mm Diferença de fuso horário
+/- hhmm Diferença de fuso horário
+/- hh Ajuste de fuso horário

As seguintes regras se aplicam à string de padrão:

  • A string de padrão diferencia maiúsculas de minúsculas.
  • All fields are variable length, and thus must use separators to specify the boundaries of the fields, with the exception of the time zone values.
  • Time zone offset formats must be at the end of the pattern string.
  • Formatting character groups can appear in any order along with any separators except for the time zone offset. Por exemplo:
    • yyyy/MM/dd
    • dd-MMM-yy
    • (dd)(MM)(yyyy) HH:mm:ss
    • yyyy-MM-dd HH:mm:ss+hh:mm

    In Impala 1.3 and later, you can switch the order of elements, use alternative separator characters, and use a different number of placeholders for each unit. Adding more instances of y , d , H , and so on produces output strings zero-padded to the requested number of characters. The exception is M for months, where M produces a non-padded value such as 3 , MM produces a zero-padded value such as 03 , MMM produces an abbreviated month name such as Mar , and sequences of 4 or more M are not allowed.

    A date string including all fields could be 'yyyy-MM-dd HH:mm:ss.SSSSSS' , 'dd/MM/yyyy HH:mm:ss.SSSSSS' , 'MMM dd, yyyy HH.mm.ss (SSSSSS)' or other combinations of placeholders and separator characters.

    In Impala 2.2.0 and higher, built-in functions that accept or return integers representing TIMESTAMP values use the BIGINT type for parameters and return values, rather than INT . This change lets the date and time functions avoid an overflow error that would otherwise occur on January 19th, 2038 (known as the "Year 2038 problem" or "Y2K38 problem" ). This change affects the FROM_UNIXTIME() and UNIX_TIMESTAMP() functions. You might need to change application code that interacts with these functions, change the types of columns that store the return values, or add CAST() calls to SQL statements that call these functions.

    Usage notes:

    The way this function deals with time zones when converting to or from TIMESTAMP values is affected by the ‑‑use_local_tz_for_unix_timestamp_conversions startup flag for the impalad daemon. See TIMESTAMP Data Type for details about how Impala handles time zone considerations for the TIMESTAMP data type.

    FROM_UTC_TIMESTAMP(TIMESTAMP ts, STRING timezone) Purpose: Converts a specified UTC timestamp value into the appropriate value for a specified time zone.

    Return type: TIMESTAMP

    Usage notes: Often used to translate UTC time zone data stored in a table back to the local date and time for reporting. The opposite of the TO_UTC_TIMESTAMP() function.

    To determine the time zone of the server you are connected to, in Impala 2.3 and higher you can call the timeofday() function, which includes the time zone specifier in its return value. Remember that with cloud computing, the server you interact with might be in a different time zone than you are, or different sessions might connect to servers in different time zones, or a cluster might include servers in more than one time zone.

    See discussion of time zones in TIMESTAMP Data Type for information about using this function for conversions between the local time zone and UTC.

    HOUR(TIMESTAMP ts) Purpose: Returns the hour field from a TIMESTAMP field.

    Return type: INT

    HOURS_ADD(TIMESTAMP date, INT hours), HOURS_ADD(TIMESTAMP date, BIGINT hours) Purpose: Returns the specified date and time plus some number of hours.

    Return type: TIMESTAMP

    HOURS_SUB(TIMESTAMP date, INT hours), HOURS_SUB(TIMESTAMP date, BIGINT hours) Purpose: Returns the specified date and time minus some number of hours.

    Return type: TIMESTAMP

    INT_MONTHS_BETWEEN(TIMESTAMP / DATE enddate, TIMESTAMP / DATE startdate) Purpose: Returns the number of months from startdate to enddate , representing only the full months that passed.

    Return type: INT

    Added in: Impala 2.3.0

    Usage notes:

    Typically used in business contexts, for example to determine whether a specified number of months have passed or whether some end-of-month deadline was reached.

    The method of determining the number of elapsed months includes some special handling of months with different numbers of days that creates edge cases for dates between the 28th and 31st days of certain months. See MONTHS_BETWEEN() for details. The INT_MONTHS_BETWEEN() result is essentially the FLOOR() of the MONTHS_BETWEEN() result.

    If either value is NULL , which could happen for example when converting a nonexistent date string such as '2015-02-29' to a TIMESTAMP , the result is also NULL .

    If the first argument represents an earlier time than the second argument, the result is negative.

    LAST_DAY(TIMESTAMP / DATE ts) Purpose: Returns the beginning of the last calendar day in the same month of ts .

    • Returns TIMESTAMP if ts is of the TIMESTAMP type.
    • Returns DATE if ts is of the DATE type.

    Added in: Impala 2.9.0

    Usage notes:

    If the input argument does not represent a valid Impala TIMESTAMP including both date and time portions, the function returns NULL . For example, if the input argument is a string that cannot be implicitly cast to TIMESTAMP , does not include a date portion, or is out of the allowed range for Impala TIMESTAMP values, the function returns NULL .

    MICROSECONDS_ADD(TIMESTAMP date, INT microseconds), MICROSECONDS_ADD(TIMESTAMP date, BIGINT microseconds) Purpose: Returns the specified date and time plus some number of microseconds.

    Return type: TIMESTAMP

    MICROSECONDS_SUB(TIMESTAMP date, INT microseconds), MICROSECONDS_SUB(TIMESTAMP date, BIGINT microseconds) Purpose: Returns the specified date and time minus some number of microseconds.

    Return type: TIMESTAMP

    MILLISECOND(TIMESTAMP ts) Purpose: Returns the millisecond portion of a TIMESTAMP value.

    Return type: INT

    Added in: Impala 2.5.0

    Usage notes:

    The millisecond value is truncated, not rounded, if the TIMESTAMP value contains more than 3 significant digits to the right of the decimal point.

    MILLISECONDS_ADD(TIMESTAMP date, INT milliseconds), MILLISECONDS_ADD(TIMESTAMP date, BIGINT milliseconds) Purpose: Returns the specified date and time plus some number of milliseconds.

    Return type: TIMESTAMP

    MILLISECONDS_SUB(TIMESTAMP date, INT milliseconds), MILLISECONDS_SUB(TIMESTAMP date, BIGINT milliseconds) Purpose: Returns the specified date and time minus some number of milliseconds.

    Return type: TIMESTAMP

    MINUTE(TIMESTAMP date) Purpose: Returns the minute field from a TIMESTAMP value.

    Return type: INT

    MINUTES_ADD(TIMESTAMP date, INT minutes), MINUTES_ADD(TIMESTAMP date, BIGINT minutes) Purpose: Returns the specified date and time plus some number of minutes.

    Return type: TIMESTAMP

    MINUTES_SUB(TIMESTAMP date, INT minutes), MINUTES_SUB(TIMESTAMP date, BIGINT minutes) Purpose: Returns the specified date and time minus some number of minutes.

    Return type: TIMESTAMP

    MONTH(TIMESTAMP / DATE date) Purpose: Returns the month field, represented as an integer, from the date argument.

    Return type: INT

    MONTHNAME(TIMESTAMP / DATE date) Purpose: Returns the month name of the date argument.

    Return type: STRING

    MONTHS_ADD(TIMESTAMP / DATE date, INT / BIGINT months) Purpose: Returns the value with the number of months added to date .

    Usage notes:

    If date is the last day of a month, the return date will fall on the last day of the target month, e.g. MONTHS_ADD(DATE'2019-01-31', 1) returns DATE'2019-02-28' .

    MONTHS_BETWEEN(TIMESTAMP / DATE enddate, TIMESTAMP / DATE startdate) Purpose: Returns the number of months from startdate to enddate . This result can include a fractional part representing extra days in addition to the full months between the dates. The fractional component is computed by dividing the difference in days by 31 (regardless of the month).

    Return type: DOUBLE

    Added in: Impala 2.3.0

    Usage notes:

    Typically used in business contexts, for example to determine whether a specified number of months have passed or whether some end-of-month deadline was reached.

    If the only consideration is the number of full months and any fractional value is not significant, use INT_MONTHS_BETWEEN() instead.

    The method of determining the number of elapsed months includes some special handling of months with different numbers of days that creates edge cases for dates between the 28th and 31st days of certain months.

    If either value is NULL , which could happen for example when converting a nonexistent date string such as '2015-02-29' to a TIMESTAMP , the result is also NULL .

    If the first argument represents an earlier time than the second argument, the result is negative.

    The time portion of the input arguements are ignored.

    MONTHS_SUB(TIMESTAMP / DATE date, INT / BIGINT months) Purpose: Returns the value with the number of months subtracted from date .

    Usage notes:

    If date is the last day of a month, the return date will fall on the last day of the target month, e.g. MONTHS_SUB(DATE'2019-02-28', 1) returns DATE'2019-01-31' .

    NANOSECONDS_ADD(TIMESTAMP date, INT nanoseconds), NANOSECONDS_ADD(TIMESTAMP date, BIGINT nanoseconds) Purpose: Returns the specified date and time plus some number of nanoseconds.

    Return type: TIMESTAMP

    Kudu considerations:

    The nanosecond portion of an Impala TIMESTAMP value is rounded to the nearest microsecond when that value is stored in a Kudu table.

    NANOSECONDS_SUB(TIMESTAMP date, INT nanoseconds), NANOSECONDS_SUB(TIMESTAMP date, BIGINT nanoseconds) Purpose: Returns the specified date and time minus some number of nanoseconds.

    Return type: TIMESTAMP

    Kudu considerations:

    The nanosecond portion of an Impala TIMESTAMP value is rounded to the nearest microsecond when that value is stored in a Kudu table.

    NEXT_DAY(TIMESTAMP / DATE date, STRING weekday) Purpose: Returns the date of the weekday that follows the specified date .

    Argument: The weekday is not case-sensitive.

    The following values are accepted for weekday : "Sunday" / "Sun" , "Monday" / "Mon" , "Tuesday" / "Tue" , "Wednesday" / "Wed" , "Thursday" / "Thu" , "Friday" / "Fri" , "Saturday" / "Sat"

    • Returns TIMESTAMP if date is of the TIMESTAMP type.
    • Returns DATE if date is of the DATE type.

    NEXT_DAY('2013-12-25','Saturday') returns '2013-12-28 00:00:00' which is the first Saturday after December 25, 2013.

    NOW() Purpose: Returns the current date and time (in the local time zone) as a TIMESTAMP value.

    Return type: TIMESTAMP

    Usage notes:

    To find a date/time value in the future or the past relative to the current date and time, add or subtract an INTERVAL expression to the return value of NOW() . See TIMESTAMP Data Type for examples.

    To produce a TIMESTAMP representing the current date and time that can be shared or stored without interoperability problems due to time zone differences, use the TO_UTC_TIMESTAMP() function and specify the time zone of the server. When TIMESTAMP data is stored in UTC form, any application that queries those values can convert them to the appropriate local time zone by calling the inverse function, FROM_UTC_TIMESTAMP() .

    To determine the time zone of the server you are connected to, in Impala 2.3 and higher you can call the timeofday() function, which includes the time zone specifier in its return value. Remember that with cloud computing, the server you interact with might be in a different time zone than you are, or different sessions might connect to servers in different time zones, or a cluster might include servers in more than one time zone.

    Any references to the NOW() function are evaluated at the start of a query. All calls to NOW() within the same query return the same value, and the value does not depend on how long the query takes.

    QUARTER(TIMESTAMP / DATE date) Purpose: Returns the quarter in the input date argument as an integer value, 1, 2, 3, or 4, where 1 represents January 1 through March 31.

    Return type: INT

    SECOND(TIMESTAMP date) Purpose: Returns the second field from a TIMESTAMP value.

    Return type: INT

    SECONDS_ADD(TIMESTAMP date, INT seconds), SECONDS_ADD(TIMESTAMP date, BIGINT seconds) Purpose: Returns the specified date and time plus some number of seconds.

    Return type: TIMESTAMP

    SECONDS_SUB(TIMESTAMP date, INT seconds), SECONDS_SUB(TIMESTAMP date, BIGINT seconds) Purpose: Returns the specified date and time minus some number of seconds.

    Return type: TIMESTAMP

    SUBDATE(TIMESTAMP / DATE date, INT / BIGINT days) Purpose: Subtracts days from date and returns the new date value.

    The days value can be negative, which gives the same result as the ADDDATE() function.

    Return type: STRING

    Added in: Impala 2.3.0

    Usage notes: The result value represents similar information as the now() function, only as a STRING type and with somewhat different formatting. For example, the day of the week and the time zone identifier are included. This function is intended primarily for compatibility with SQL code from other systems that also have a timeofday() function. Prefer to use now() if practical for any new Impala code.

    If the first argument represents a later point in time than the second argument, the result is 1.

    If the first argument represents an earlier point in time than the second argument, the result is -1.

    If the first and second arguments represent identical points in time, the result is 0.

    If either argument is NULL , the result is NULL .

    Return type: INT (either -1, 0, 1, or NULL )

    Added in: Impala 2.3.0

    Usage notes:

    Usage notes: A comparison function for TIMESTAMP values that only tests whether the date and time increases, decreases, or stays the same. Similar to the SIGN() function for numeric values.

    TO_DATE(TIMESTAMP ts) Purpose: Returns a string representation of the date field from the ts argument.

    Return type: STRING

    TO_TIMESTAMP(BIGINT unixtime), TO_TIMESTAMP(STRING date, STRING pattern) Purpose: Converts an integer or string representing a date/time value into the corresponding TIMESTAMP value.

    Return type: TIMESTAMP

    Added in: Impala 2.3.0

    Usage notes:

    An integer argument represents the number of seconds past the epoch (midnight on January 1, 1970). It is the converse of the UNIX_TIMESTAMP() function, which produces a BIGINT representing the number of seconds past the epoch.

    A string argument, plus another string argument representing the pattern, turns an arbitrary string representation of a date and time into a true TIMESTAMP value. The ability to parse many kinds of date and time formats allows you to deal with temporal data from diverse sources, and if desired to convert to efficient TIMESTAMP values during your ETL process. Using TIMESTAMP directly in queries and expressions lets you perform date and time calculations without the overhead of extra function calls and conversions each time you reference the applicable columns.

    The following examples demonstrate how to convert an arbitrary string representation to TIMESTAMP based on a pattern string:

    The following examples show how to convert a BIGINT representing seconds past epoch into a TIMESTAMP value:

    TO_UTC_TIMESTAMP(TIMESTAMP ts, STRING timezone) Purpose: Converts a specified timestamp value in a specified time zone into the corresponding value for the UTC time zone.

    Return type: TIMESTAMP

    Usage notes:

    Often used in combination with the now() function, to translate local date and time values to the UTC time zone for consistent representation on disk. The opposite of the FROM_UTC_TIMESTAMP() function.

    See discussion of time zones in TIMESTAMP Data Type for information about using this function for conversions between the local time zone and UTC.

    The simplest use of this function is to turn a local date/time value to one with the standardized UTC time zone. Because the time zone specifier is not saved as part of the Impala TIMESTAMP value, all applications that refer to such data must agree in advance which time zone the values represent. If different parts of the ETL cycle, or different instances of the application, occur in different time zones, the ideal reference point is to convert all TIMESTAMP values to UTC for storage.

    Once a value is converted to the UTC time zone by TO_UTC_TIMESTAMP() , it can be converted back to the local time zone with FROM_UTC_TIMESTAMP() . You can combine these functions using different time zone identifiers to convert a TIMESTAMP between any two time zones. This example starts with a TIMESTAMP value representing Pacific Daylight Time, converts it to UTC, and converts it to the equivalent value in Eastern Daylight Time.

    TRUNC(TIMESTAMP / DATE ts, STRING unit) Purpose: Returns the ts truncated to the unit specified.

    Argument: The unit argument is not case-sensitive. This argument string can be one of:


    5 Answers 5

    I checked your profile and saw that you are in the UK. If your sql server is set to use the dateformat dmy then that explains your issue. Without using the 'T' instead of the space in the datetime string, Sql Server won't recognize it as ISO8601 format.

    Querying using dates and/or datetimes can be tricky, to make sure you are getting what you are looking for I recommend reading:

    edit: to clarify the out of range value in your error message would be from interpreting the month as 30 and the day as 11.

    I do not understand why the data is being converted from varchar to datetime when 'Created' is set to datetime

    The literals you are providing for comparison to the Created column are strings. To compare those literals with the datetime column, SQL Server attempts to convert the strings to datetime types, according to the rules of data type precedence. Without explicit information about the format of the strings, SQL Server follows its convoluted rules for interpreting strings as datetimes.

    In my view, the neatest way to avoid these types of issues is to be explicit about types. SQL Server provides the CAST and CONVERT functions for this purpose. When working with strings and date/time types, CONVERT is to be preferred because it provides a style parameter to explicitly define the string format.

    The question uses strings in ODBC canonical (with milliseconds) format (style 121). Being explicit about the data type and string style results in the following:

    That said, there are good reasons (as Aaron points out in his answer) to use a half-open range instead of BETWEEN (I use style 120 below just for variety):

    Being explicit about types is a very good habit to get into, particularly when dealing with dates and times.


    Assista o vídeo: World Fart Championship 2018, Finland (Outubro 2021).