Suite

Convertir le champ DateTime en Date juste dans l'expression d'étiquette

Convertir le champ DateTime en Date juste dans l'expression d'étiquette


J'ai un champ DateTime (ex: CreatedDate) et je souhaite afficher uniquement la date avec l'étiquette. Comment configurer l'expression d'étiquette pour le faire en utilisant python?


Il est amusant que l'interpréteur python (calculateur de champ) traite les champs datetime Arcgis comme des textes unicode. pour extraire la date de cette chaîne, nous devons la convertir en datetime, puis extraire la date, puis la convertir en chaîne !

Code autonome (en supposant que vous ayez une date/heure formatée comme08/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").date())

expression d'étiquette (analyseur python):

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

La date dans un champ DateTime correspond aux 10 premiers caractères du champ.

J'ai essayé ce qui suit dans un domaine appelé last_edited_date.

Dans votre expression d'étiquette, définissez votre analyseur sur Python.

Cochez la case Avancé et définissez votre expression comme suit :

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

Et changer last_edited_date quel que soit votre domaine est appelé. La clé ici est d'utiliser la capacité de découpage de chaîne de python. C'est-à-dire, [:10] pour obtenir les 10 premiers caractères du champ.

Les résultats ressemblent à ceci :


Mettre en forme un champ de date et d'heure

Les types de données de date et d'heure ont une grande variété de formats pour vous aider à répondre à vos circonstances uniques. Lors du formatage, vous avez trois choix : conserver les formats par défaut, appliquer un format prédéfini ou créer un format personnalisé. Lorsque vous appliquez un format à un champ de table, ce même format est automatiquement appliqué à tout contrôle de formulaire ou d'état que vous liez par la suite à ce champ de table. Le formatage modifie uniquement la façon dont les données sont affichées et n'affecte pas la façon dont les données sont stockées ou comment les utilisateurs peuvent saisir des données.


5 réponses 5

Cela semble fonctionner et garder la précision également:

Le CAST en DATETIME2(7) convertit la valeur TIME(7) ( @T ) en DATETIME2 où la partie date est '1900-01-01' , qui est la valeur par défaut des types date et datetime (voir datetime2 et le commentaire * sur la page CAST et CONVERT sur MSDN.)

* . Lorsque des données de caractères qui représentent uniquement des composants de date ou d'heure sont converties en types de données datetime ou smalldatetime, le composant d'heure non spécifié est défini sur 00:00:00.000, et le composant de date non spécifié est défini sur 1900-01-01.

Les fonctions DATEADD() et DATEDIFF() s'occupent du reste, c'est-à-dire en ajoutant la différence en jours entre le 1900-01-01 et la valeur DATE ( @D ).

Comme l'a remarqué @Quandary, l'expression ci-dessus est considérée comme non déterministe par SQL Server. Si nous voulons une expression déterministe, disons parce qu'elle doit être utilisée pour une colonne PERSISTED, le '19000101' ** doit être remplacé par 0 ou CONVERT(DATE, '19000101', 112) :

** : DATEDIFF(day, '19000101', d) n'est pas déterministe car il effectue une conversion implicite de la chaîne en DATETIME et les conversions de chaînes en datetime ne sont déterministes que lorsque des styles spécifiques sont utilisés.


11 réponses 11

Si le type de colonne est DateTime dans SQL, il stockera une heure où vous en passez une ou non.

Il vaudrait mieux enregistrer la date correctement :

puis formatez-le lorsque vous avez besoin de l'afficher :

Ou si vous utilisez EditorFor :

Pour ajouter une propriété à votre modèle, ajoutez ce code :

Je veux juste clarifier pour cette réponse qu'en disant "Si vous utilisez EditorFor", cela signifie que vous devez avoir un modèle EditorFor pour le type de valeur que vous essayez de représenter.

Les modèles d'éditeur sont un moyen sympa de gérer les contrôles répétitifs dans MVC :

Vous pouvez les utiliser pour des types naïfs comme String comme je l'ai fait ci-dessus, mais ils sont particulièrement utiles pour vous permettre de modéliser un ensemble de champs de saisie pour un type de données plus compliqué.

J'ai juste dû gérer ce scénario moi-même - j'ai trouvé un moyen très simple de le faire, annotez simplement votre propriété dans le modèle comme ceci :

Il masquera également le bouton de l'heure du sélecteur de date.

Désolé si cette réponse est un peu tardive)

Cela fonctionne si vous souhaitez afficher dans une zone de texte :

La date/heure dans la base de données ne sera pas un formaté version du tout. Ce sera juste la date/heure elle-même. Comment vous affichage cette date/heure à laquelle vous extrayez la valeur de la base de données est une autre affaire. Je soupçonne fortement que vous vouliez vraiment :

Oui, si vous regardez la base de données à l'aide de SQL Server Studio ou autre, vous verrez maintenant minuit - mais ce n'est pas pertinent, et lorsque vous récupérez la date de la base de données et l'affichez à un utilisateur, ensuite vous pouvez appliquer le format approprié.

EDIT : en ce qui concerne votre question modifiée, le problème ne vient pas du modèle - c'est la façon dont vous spécifiez la vue. Vous devriez utiliser quelque chose comme :

où d est le spécificateur de format de date et d'heure standard pour le modèle de date courte (ce qui signifie qu'il prendra en compte les paramètres culturels actuels).

C'est le peu que j'ai répété à maintes reprises - que lorsque vous afficher la date/heure à l'utilisateur, c'est le moment de le formater comme une date sans heure.

EDIT : Si cela ne fonctionne pas, il devrait y avoir un moyen de décorer le modèle ou la vue avec une chaîne de format - ou quelque chose comme ça. Je ne suis pas vraiment une personne MVC, mais j'ai l'impression que là-bas devrait être un bon moyen de le faire de manière déclarative.


Fonctions datetime en SQL standard

Toutes les sorties sont automatiquement formatées selon ISO 8601, en séparant la date et l'heure par un T .

CURRENT_DATETIME

La description

Renvoie l'heure actuelle sous forme d'objet DATETIME. Les parenthèses sont facultatives lorsqu'elles sont appelées sans arguments.

Cette fonction prend en charge un paramètre de fuseau horaire facultatif. Voir Définitions de fuseau horaire pour plus d'informations sur la façon de spécifier un fuseau horaire.

Type de données de retour

Lorsqu'une colonne nommée current_datetime est présente, le nom de la colonne et l'appel de fonction sans parenthèses sont ambigus. Pour assurer l'appel de la fonction, ajoutez des parenthèses pour assurer le nom de la colonne, qualifiez-la avec sa variable de plage. Par exemple, la requête suivante sélectionnera la fonction dans la colonne now et la colonne table dans la colonne current_datetime.

DATEHEURE

La description

  1. Construit un objet DATETIME à l'aide de valeurs INT64 représentant l'année, le mois, le jour, l'heure, la minute et la seconde.
  2. Construit un objet DATETIME à l'aide d'un objet DATE et d'un objet TIME facultatif.
  3. Construit un objet DATETIME à l'aide d'un objet TIMESTAMP. Il prend en charge un paramètre facultatif pour spécifier un fuseau horaire. Si aucun fuseau horaire n'est spécifié, le fuseau horaire par défaut, UTC, est utilisé.

Type de données de retour

EXTRAIT

La description

Renvoie une valeur qui correspond à la partie spécifiée à partir d'une expression_dateheure fournie.

  • MICROSECONDE
  • MILLISECONDE
  • DEUXIÈME
  • MINUTE
  • HEURE
  • JOUR DE LA SEMAINE
  • JOURNÉE
  • JOUR DE L'ANNEE
  • SEMAINE : Renvoie le numéro de semaine de la date dans la plage [0, 53]. Les semaines commencent par le dimanche et les dates avant le premier dimanche de l'année sont dans la semaine 0.
  • SEMAINE(<WEEKDAY>) : renvoie le numéro de semaine de datetime_expression dans la plage [0, 53]. Les semaines commencent le JOUR DE LA SEMAINE . datetime s avant le premier WEEKDAY de l'année sont dans la semaine 0. Les valeurs valides pour WEEKDAY sont SUNDAY , MONDAY , TUESDAY , WEDNESDAY , JEUDI , VENDREDI et SAMEDI .
  • ISOWEEK : Renvoie le numéro de semaine ISO 8601 de datetime_expression . Les ISOWEEK commencent lundi. Les valeurs de retour sont dans la plage [1, 53]. La première ISOWEEK de chaque année ISO commence le lundi précédant le premier jeudi de l'année civile grégorienne.
  • MOIS
  • TRIMESTRE
  • AN
  • ISOYEAR : renvoie l'année de numérotation des semaines ISO 8601, qui est l'année civile grégorienne contenant le jeudi de la semaine à laquelle appartient expression_date.
  • DATE
  • TEMPS

Les valeurs renvoyées tronquent les périodes d'ordre inférieur. Par exemple, lors de l'extraction des secondes, EXTRACT tronque les valeurs en millisecondes et en microsecondes.

Type de données de retour

INT64 , sauf dans les cas suivants :

Dans l'exemple suivant, EXTRACT renvoie une valeur correspondant à la partie de temps HOUR.

Dans l'exemple suivant, EXTRACT renvoie des valeurs correspondant à différentes parties d'heure d'une colonne de datetimes.

Dans l'exemple suivant, datetime_expression tombe un dimanche. EXTRACT calcule la première colonne en utilisant les semaines qui commencent le dimanche et il calcule la deuxième colonne en utilisant les semaines qui commencent le lundi.

DATETIME_ADD

La description

Ajoute des unités int64_expression de partie à l'objet DATETIME.

DATETIME_ADD prend en charge les valeurs suivantes pour la pièce :

  • MICROSECONDE
  • MILLISECONDE
  • DEUXIÈME
  • MINUTE
  • HEURE
  • JOURNÉE
  • SEMAINE . Équivalent à 7 JOURS.
  • MOIS
  • TRIMESTRE
  • AN

Un traitement spécial est requis pour les pièces MOIS, TRIMESTRE et ANNÉE lorsque la date correspond (ou est proche) du dernier jour du mois. Si le mois résultant a moins de jours que le jour d'origine DATETIME's, alors le jour de résultat est le dernier jour du nouveau mois.

Type de données de retour

DATETIME_SUB

La description

Soustrait les unités int64_expression de la partie de DATETIME .

DATETIME_SUB prend en charge les valeurs suivantes pour la pièce :

  • MICROSECONDE
  • MILLISECONDE
  • DEUXIÈME
  • MINUTE
  • HEURE
  • JOURNÉE
  • SEMAINE . Équivalent à 7 JOURS.
  • MOIS
  • TRIMESTRE
  • AN

Un traitement spécial est requis pour les pièces MOIS , TRIMESTRE et ANNÉE lorsque la date correspond (ou est proche) du dernier jour du mois. Si le mois résultant a moins de jours que le jour DATETIME 's d'origine, alors le jour du résultat est le dernier jour du nouveau mois.

Type de données de retour

DATETIME_DIFF

La description

Renvoie le nombre d'intervalles de parties entières spécifiés entre deux objets DATETIME ( expression_date_a - expression_date_b ). Si le premier DATETIME est antérieur au second, la sortie est négative. Lève une erreur si le calcul dépasse le type de résultat, par exemple si la différence en microsecondes entre les deux objets DATETIME dépasse une valeur INT64.

DATETIME_DIFF prend en charge les valeurs suivantes pour la pièce :

  • MICROSECONDE
  • MILLISECONDE
  • DEUXIÈME
  • MINUTE
  • HEURE
  • JOURNÉE
  • SEMAINE : Cette partie de date commence le dimanche.
  • SEMAINE(<WEEKDAY>) : Cette partie de date commence le WEEKDAY . Les valeurs valides pour WEEKDAY sont DIMANCHE , LUNDI , MARDI , MERCREDI , JEUDI , VENDREDI et SAMEDI .
  • ISOWEEK : Utilise les limites de semaine ISO 8601. Les semaines ISO commencent le lundi.
  • MOIS
  • TRIMESTRE
  • AN
  • ISOYEAR : Utilise la limite de l'année de numérotation des semaines ISO 8601. La limite de l'année ISO est le lundi de la première semaine dont le jeudi appartient à l'année civile grégorienne correspondante.

Type de données de retour

L'exemple ci-dessus montre le résultat de DATETIME_DIFF pour deux DATETIME distants de 24 heures. DATETIME_DIFF avec la partie SEMAINE renvoie 1 car DATETIME_DIFF compte le nombre de limites de partie dans cette plage de DATETIME s. Chaque SEMAINE commence le dimanche, il y a donc une limite partielle entre le samedi, 2017-10-14 00:00:00 et dimanche, 2017-10-15 00:00:00 .

L'exemple suivant montre le résultat de DATETIME_DIFF pour deux dates d'années différentes. DATETIME_DIFF avec la partie de date YEAR renvoie 3 car il compte le nombre de limites d'année civile grégorienne entre les deux DATETIME . DATETIME_DIFF avec la partie de date ISOYEAR renvoie 2 car le deuxième DATETIME appartient à l'année ISO 2015. Le premier jeudi de l'année civile 2015 était le 01-01-2015, donc l'année ISO 2015 commence le lundi précédent, le 29/12/2014 .

L'exemple suivant montre le résultat de DATETIME_DIFF pendant deux jours consécutifs. Le premier rendez-vous tombe un lundi et le deuxième un dimanche. DATETIME_DIFF avec la partie de date SEMAINE renvoie 0 car cette partie de temps utilise des semaines qui commencent le dimanche. DATETIME_DIFF avec la partie date WEEK(MONDAY) renvoie 1. DATETIME_DIFF avec la partie date ISOWEEK renvoie également 1 car les semaines ISO commencent le lundi.

DATETIME_TRUNC

La description

Tronque un objet DATETIME à la granularité de part .

DATETIME_TRUNC prend en charge les valeurs suivantes pour la pièce :

  • MICROSECONDE
  • MILLISECONDE
  • DEUXIÈME
  • MINUTE
  • HEURE
  • JOURNÉE
  • SEMAINE
  • WEEK(<WEEKDAY>) : tronque datetime_expression à la limite de la semaine précédente, où les semaines commencent le WEEKDAY . Les valeurs valides pour WEEKDAY sont DIMANCHE , LUNDI , MARDI , MERCREDI , JEUDI , VENDREDI et SAMEDI .
  • ISOWEEK : Tronque datetime_expression à la limite de semaine ISO 8601 précédente. Les ISOWEEK commencent lundi. La première ISOWEEK de chaque année ISO contient le premier jeudi de l'année civile grégorienne correspondante. Toute expression_date antérieure à celle-ci sera tronquée au lundi précédent.
  • MOIS
  • TRIMESTRE
  • AN
  • ISOYEAR : Tronque datetime_expression à la limite d'année de numérotation des semaines ISO 8601 précédente. La limite de l'année ISO est le lundi de la première semaine dont le jeudi appartient à l'année civile grégorienne correspondante.

Type de données de retour

Dans l'exemple suivant, le DATETIME d'origine tombe un dimanche. Étant donné que la partie est WEEK(MONDAY) , DATE_TRUNC renvoie le DATETIME du lundi précédent.

Dans l'exemple suivant, le datetime_expression d'origine est dans l'année civile grégorienne 2015. Cependant, DATETIME_TRUNC avec la partie date ISOYEAR tronque le datetime_expression au début de l'année ISO, pas l'année civile grégorienne. Le premier jeudi de l'année civile 2015 était le 01-01-2015, donc l'année ISO 2015 commence le lundi précédent, le 29-12-2014. Par conséquent, la limite d'année ISO précédant le datetime_expression 2015-06-15 00:00:00 est 2014-12-29.

FORMAT_DATETIME

La description

Formate un objet DATETIME en fonction de la chaîne_format spécifiée. Voir Éléments de format pris en charge pour DATETIME pour une liste des éléments de format pris en charge par cette fonction.

Type de données de retour

DERNIER JOUR

La description

Renvoie le dernier jour à partir d'une expression datetime qui contient la date. Ceci est couramment utilisé pour retourner le dernier jour du mois.

Vous pouvez éventuellement spécifier la partie date pour laquelle le dernier jour est renvoyé. Si ce paramètre n'est pas utilisé, la valeur par défaut est MONTH . LAST_DAY prend en charge les valeurs suivantes pour date_part :

  • AN
  • TRIMESTRE
  • MOIS
  • SEMAINE . Équivalent à 7 JOURS.
  • SEMAINE(<JOUR SEMAINE>) . <WEEKDAY> représente le premier jour de la semaine. Les valeurs valides sont DIMANCHE , LUNDI , MARDI , MERCREDI , JEUDI , VENDREDI et SAMEDI .
  • SEMAINE ISO. Utilise les limites de semaine ISO 8601. Les semaines ISO commencent le lundi.
  • ANNÉE ISO. Utilise la limite d'année de numérotation des semaines ISO 8601. La limite de l'année ISO est le lundi de la première semaine dont le jeudi appartient à l'année civile grégorienne correspondante.

Type de données de retour

Ceux-ci renvoient tous les deux le dernier jour du mois :

Cela renvoie le dernier jour de l'année :

Cela renvoie le dernier jour de la semaine pour une semaine qui commence un dimanche :

Cela renvoie le dernier jour de la semaine pour une semaine qui commence un lundi :

PARSE_DATETIME

La description

format_string contient les éléments de format qui définissent le formatage de datetime_string. Chaque élément de datetime_string doit avoir un élément correspondant dans format_string . L'emplacement de chaque élément dans format_string doit correspondre à l'emplacement de chaque élément dans datetime_string .

La chaîne de format prend entièrement en charge la plupart des éléments de format, à l'exception de %Q , %a , %A , %g , %G , %j , %P , %u , %U , %V , %w et %W .

PARSE_DATETIME analyse la chaîne selon les règles suivantes :

  • Champs non spécifiés. Tout champ non spécifié est initialisé à partir du 1970-01-01 00:00:00.0 . Par exemple, si l'année n'est pas spécifiée, la valeur par défaut est 1970 .
  • Noms insensibles à la casse. Les noms, tels que Monday et February , ne sont pas sensibles à la casse.
  • Espace blanc. Un ou plusieurs espaces blancs consécutifs dans la chaîne de format correspondent à zéro ou plusieurs espaces blancs consécutifs dans la chaîne DATETIME. Les espaces blancs de début et de fin dans la chaîne DATETIME sont toujours autorisés, même s'ils ne figurent pas dans la chaîne de format.
  • Priorité des formats. Lorsque deux éléments de format ou plus ont des informations qui se chevauchent, le dernier remplace généralement les précédents, à quelques exceptions près. Par exemple, %F et %Y affectent l'année, donc l'élément le plus tôt remplace le plus tard. Consultez les descriptions de %s , %C et %y dans Éléments de format pris en charge pour DATETIME.

Type de données de retour

Les exemples suivants analysent un littéral STRING en tant que DATETIME .

L'exemple suivant analyse un littéral STRING contenant une date dans un format de langage naturel en tant que DATETIME .

Éléments de format pris en charge pour DATETIME

Sauf indication contraire, les fonctions DATETIME qui utilisent des chaînes de format prennent en charge les éléments suivants :

Élément de mise en forme La description Exemple
%UNE Le nom complet du jour de la semaine. Mercredi
%une Le nom abrégé du jour de la semaine. mer
%B Le nom complet du mois. janvier
%b ou %h Le nom abrégé du mois. Jan
%C Le siècle (une année divisée par 100 et tronquée à un entier) sous forme de nombre décimal (00-99). 20
%c La représentation de la date et de l'heure. mer. 20 janv. 21:47:00 2021
%RÉ La date au format %m/%d/%y. 01/20/21
%ré Le jour du mois sous forme de nombre décimal (01-31). 20
%e Le jour du mois sous forme de nombre décimal (1-31) les chiffres simples sont précédés d'un espace. 20
%F La date au format %A-%m-%d. 2021-01-20
%G L'année ISO 8601 avec le siècle en nombre décimal. Chaque année ISO commence le lundi précédant le premier jeudi de l'année civile grégorienne. Notez que %G et %Y peuvent produire des résultats différents près des limites de l'année grégorienne, où l'année grégorienne et l'année ISO peuvent diverger. 2021
%g L'année ISO 8601 sans siècle sous forme de nombre décimal (00-99). Chaque année ISO commence le lundi précédant le premier jeudi de l'année civile grégorienne. Notez que %g et %y peuvent produire des résultats différents près des limites de l'année grégorienne, où l'année grégorienne et l'année ISO peuvent diverger. 21
%H L'heure (horloge de 24 heures) sous forme de nombre décimal (00-23). 21
%JE L'heure (horloge de 12 heures) sous forme de nombre décimal (01-12). 09
%j Le jour de l'année sous forme de nombre décimal (001-366). 020
%k L'heure (horloge de 24 heures) sous forme de nombre décimal (0-23) les chiffres simples sont précédés d'un espace. 21
%l L'heure (horloge de 12 heures) sous forme de nombre décimal (1-12), les chiffres simples sont précédés d'un espace. 9
%M La minute sous forme de nombre décimal (00-59).
%m Le mois sous forme de nombre décimal (01-12). 01
%n Un caractère de nouvelle ligne.
%P Soit le matin, soit le soir. après-midi
%p Soit AM ou PM. PM
%Q Le quart sous forme de nombre décimal (1-4). 1
%R L'heure au format %H:%M. 21:47
%r L'heure de l'horloge de 12 heures en notation AM/PM. 21:47:00
%S Le second sous forme de nombre décimal (00-60). 00
%s Le nombre de secondes depuis 1970-01-01 00:00:00. Remplace toujours tous les autres éléments de format, indépendamment de l'endroit où %s apparaît dans la chaîne. Si plusieurs éléments %s apparaissent, le dernier a la priorité. 1611179220
%T L'heure au format %H:%M:%S. 21:47:00
%t Un caractère de tabulation.
%U Le numéro de semaine de l'année (dimanche comme premier jour de la semaine) sous forme de nombre décimal (00-53). 03
%u Le jour de la semaine (lundi comme premier jour de la semaine) sous forme de nombre décimal (1-7). 3
%V Le numéro de semaine ISO 8601 de l'année (lundi comme premier jour de la semaine) sous forme de nombre décimal (01-53). Si la semaine contenant le 1er janvier a quatre jours ou plus dans la nouvelle année, alors c'est la semaine 1, sinon c'est la semaine 53 de l'année précédente, et la semaine suivante est la semaine 1. 03
%W Le numéro de semaine de l'année (lundi comme premier jour de la semaine) sous forme de nombre décimal (00-53). 03
%w Le jour de la semaine (dimanche comme premier jour de la semaine) sous forme de nombre décimal (0-6). 3
%X La représentation de l'heure au format HH:MM:SS. 21:47:00
%X La représentation de la date au format MM/JJ/AA. 01/20/21
%A L'année avec le siècle en nombre décimal. 2021
%y L'année sans siècle sous forme de nombre décimal (00-99), avec un zéro non significatif facultatif. Peut être mélangé avec %C. Si %C n'est pas spécifié, les années 00-68 sont des années 2000, tandis que les années 69-99 sont des années 1900. 21
%% Un seul caractère %. %
%E#S Secondes avec # chiffres de précision fractionnaire. 00.000
%E*S Secondes avec une précision fractionnaire complète (un « * » littéral). 00
%E4Y Années à quatre caractères (0001 . 9999). Notez que %Y produit autant de caractères qu'il en faut pour restituer complètement l'année. 2021

Sauf indication contraire, le contenu de cette page est sous licence Creative Commons Attribution 4.0 et les exemples de code sont sous licence Apache 2.0. Pour plus de détails, consultez les règles du site Google Developers. Java est une marque déposée d'Oracle et/ou de ses filiales.


Les méthodes que vous pouvez utiliser pour transmettre des représentations sous forme de chaîne de valeurs date/heure entre X++ et .NET sont les suivantes :

System.DateTime.GetDateTimeFormats (Entrez un System.Char de s.)

Ni System.Convert::ToString ni System.DateTime.ToString ne produisent un format pouvant être saisi par DateTimeUtil::Parse.

Format de chaîne ISO pour la date/l'heure

Le format de sortie de DateTimeUtil::toStr et System.DateTime.GetDateTimeFormats est aaaa-mm-jjThh:mm:ss au format 24 heures (pas de fin AM ou PM), avec des zéros non significatifs. Par exemple, le 20 juillet 2007 à 13h45 serait affiché sous la forme 2007-07-20T13:45:00. Ce format de chaîne est une norme de l'Organisation internationale de normalisation (ISO).

Ce format de chaîne ISO est entré dans DateTimeUtil::parse et System.DateTime::Parse. pour convertir la chaîne en un type date/heure.

Exemple de conversion entre date/heure et chaîne

L'exemple de code X++ suivant montre comment des chaînes compatibles peuvent être transmises entre .NET et X++ et converties en variables date/heure.


À propos des "Conseils QA"

Les conseils d'assurance qualité du W3C sont de courts documents expliquant des éléments de connaissances utiles pour les développeurs ou les concepteurs Web, hébergés et produits par le groupe d'intérêt pour l'assurance qualité du W3C.

Bien que les conseils soient soigneusement examinés par les participants du groupe, ils ne doivent pas être considérés comme autre chose que des bouts de sagesse informatifs, et surtout, ils sont ne pas spécifications techniques normatives du W3C.

Apprenez-en plus sur les conseils, comment soumettre vos propres perles de sagesse et trouvez tous les autres conseils d'assurance qualité dans l'index des conseils.

Copyright © 1994-2006 W3C ® (MIT , ERCIM , Keio), Tous droits réservés. Les règles du W3C en matière de responsabilité, de marque déposée, d'utilisation des documents et de licence logicielle s'appliquent. Vos interactions avec ce site sont conformes à nos déclarations de confidentialité publiques et des membres.


Vous ne pouvez pas obtenir une chaîne vide car vous renvoyez le type de valeur DATE à partir de ISNULL .

Renvoie le même type que check_expression. Si un littéral NULL est fourni en tant que check_expression, renvoie le type de données de replacement_value. Si un littéral NULL est fourni en tant que check_expression et qu'aucune valeur de remplacement n'est fournie, renvoie un int.

Si vous vérifiez si la valeur est NULL ou non, il n'est pas nécessaire de la convertir en date, à moins que vous ne vouliez renvoyer une valeur de date (ce que vous ne semblez pas faire).

Une date NULL est NULL (aucune valeur). Une chaîne vide, en revanche, est évaluée à 0 , qui dans SQL Server est implicitement un entier représentant le nombre de jours depuis 1900-01-01 .


Fonctions de date et d'heure Impala

Les types de données Impala sous-jacents pour les données de date et d'heure sont TIMESTAMP et DATE .

  • Le paramètre est désactivé par défaut, ce qui signifie que les fonctions telles que FROM_UNIXTIME() et UNIX_TIMESTAMP() considèrent que les valeurs d'entrée représentent toujours le fuseau horaire UTC.
  • Le paramètre s'applique également lorsque vous CAST() une valeur BIGINT sur TIMESTAMP ou une valeur TIMESTAMP sur BIGINT . Lorsque ce paramètre est activé, ces fonctions et opérations sont converties vers et à partir des valeurs représentant le fuseau horaire local. Voir Type de données TIMESTAMP pour plus de détails sur la façon dont Impala gère les considérations de fuseau horaire pour le type de données TIMESTAMP.

Référence de la fonction :

Impala prend en charge les fonctions de date et d'heure suivantes :

  • ADD_MONTHS
  • AJOUTER
  • DATE ACTUELLE
  • CURRENT_TIMESTAMP
  • DATE_ADD
  • DATE_PART
  • DATE_SUB
  • DATE_TRUNC
  • DATE IFF
  • JOURNÉE
  • NOM DU JOUR
  • JOUR DE LA SEMAINE
  • JOUR DE L'ANNEE
  • DAYS_ADD
  • DAYS_SUB
  • EXTRAIT
  • FROM_TIMESTAMP
  • FROM_UNIXTIME
  • FROM_UTC_TIMESTAMP
  • HEURE
  • HOURS_ADD
  • HOURS_SUB
  • INT_MONTHS_BETWEEN
  • MICROSECONDS_ADD
  • MICROSECONDS_SUB
  • MILLISECONDE
  • MILLISECONDS_ADD
  • MILLISECONDS_SUB
  • MINUTE
  • MINUTES_ADD
  • MINUTES_SUB
  • MOIS
  • NOM DU MOIS
  • MONTHS_ADD
  • MONTHS_BETWEEN
  • MONTHS_SUB
  • NANOSECONDS_ADD
  • NANOSECONDS_SUB
  • LE PROCHAIN ​​JOUR
  • À PRÉSENT
  • TRIMESTRE
  • DEUXIÈME
  • SECONDS_ADD
  • SECONDS_SUB
  • SOUS-DATE
  • MOMENT DE LA JOURNÉE
  • TIMESTAMP_CMP
  • À CE JOUR
  • TO_TIMESTAMP
  • TO_UTC_TIMESTAMP
  • TRONÇON
  • UNIX_TIMESTAMP
  • UTC_TIMESTAMP
  • SEMAINE DE L'ANNÉE
  • SEMAINES_ADD
  • SEMAINES_SUB
  • AN
  • YEARS_ADD
  • ANNÉES_SUB

Remarques d'utilisation :

Identique à MONTHS_ADD() . Disponible en Impala 1.4 et supérieur. Pour la compatibilité lors du portage de code avec les extensions de fournisseur.

AJOUTER(TIMESTAMP / DATE date, INT / BIGINT jours) Objectif: Ajoute des jours à ce jour et renvoie la nouvelle valeur de date.

La valeur des jours peut être négative, ce qui donne le même résultat que la fonction SUBDATE().

Toutes les références à la fonction CURRENT_DATE() sont évaluées au début d'une requête. Tous les appels à CURRENT_DATE() dans la même requête renvoient la même valeur, et la valeur ne dépend pas de la durée de la requête.

Type de retour : DATE

CURRENT_TIMESTAMP() Objectif: Alias ​​pour la fonction NOW().

Type de retour : horodatage

DATE_ADD(TIMESTAMP/DATE date, INT/BIGINT jours), DATE_ADD(TIMESTAMP/DATE date, interval_expression) Objectif: Ajoute un nombre de jours spécifié à l'argument de date. Avec une expression INTERVAL comme deuxième argument, vous pouvez calculer une valeur delta à l'aide d'autres unités telles que les semaines, les années, les heures, les secondes, etc., voir Type de données TIMESTAMP pour plus de détails.

Les exemples suivants montrent la notation abrégée d'une expression INTERVAL, au lieu de spécifier le nombre précis de jours. La notation INTERVAL vous permet également de travailler avec des unités plus petites qu'une seule journée.

Comme toutes les fonctions date/heure qui traitent des mois, date_add() gère les dates inexistantes après la fin d'un mois en définissant la date sur le dernier jour du mois. L'exemple suivant montre comment la date inexistante du 31 avril est normalisée au 30 avril :

  • 0 si les dates sont identiques.
  • 1 si date1 > date2 .
  • -1 si date1 < date2 .
  • NULL si date1 ou date2 est NULL .

Type de retour : INT

DATE_PART (STRING partie, TIMESTAMP / DATE date) Objectif: Similaire à EXTRACT() , avec l'ordre des arguments inversé. Prend en charge les mêmes unités de date et d'heure que EXTRACT() . Pour la compatibilité avec le code SQL contenant des extensions de fournisseur.

Type de retour : BIGINT

DATE_SUB (date de début TIMESTAMP, jours INT), DATE_SUB (date de début TIMESTAMP, expression_intervalle) Objectif: Soustrait un nombre spécifié de jours d'une valeur TIMESTAMP. Avec une expression INTERVAL comme deuxième argument, vous pouvez calculer une valeur delta à l'aide d'autres unités telles que les semaines, les années, les heures, les secondes, etc., voir Type de données TIMESTAMP pour plus de détails.

L'exemple suivant montre l'utilisation la plus simple, consistant à soustraire un nombre spécifié de jours d'une valeur TIMESTAMP :

Les exemples suivants montrent la notation abrégée d'une expression INTERVAL, au lieu de spécifier le nombre précis de jours. La notation INTERVAL vous permet également de travailler avec des unités plus petites qu'une seule journée.

Comme toutes les fonctions date/heure qui traitent des mois, date_add() gère les dates inexistantes après la fin d'un mois en définissant la date sur le dernier jour du mois. L'exemple suivant montre comment la date inexistante du 31 avril est normalisée au 30 avril :

DATE_TRUNC (unité STRING, TIMESTAMP / DATE ts) Objectif: Renvoie la valeur ts tronquée à l'unité spécifiée.

Argument: L'argument unit n'est pas sensible à la casse. Cette chaîne d'argument peut être l'une des suivantes :

Unité Pris en charge pour TIMESTAMP Pris en charge pour le DATE
'MICRO SECONDES' Oui Non
'MILLISECONDES' Oui Non
'DEUXIÈME' Oui Non
'MINUTE' Oui Non
'HEURE' Oui Non
'JOURNÉE' Oui Oui
'SEMAINE' Oui Oui
'MOIS' Oui Oui
'AN' Oui Oui
'DÉCENNIE' Oui Oui
'SIÈCLE' Oui Oui
'MILLÉNAIRE' Oui Oui

Ajouté dans : Impala 2.11.0

Remarques d'utilisation :

Bien que cette fonction soit similaire à l'appel de TRUNC() avec un argument TIMESTAMP ou DATE, l'ordre des arguments et les unités reconnues sont différents entre TRUNC() et DATE_TRUNC() . Ces fonctions ne sont donc pas interchangeables.

Cette fonction est généralement utilisée dans les requêtes GROUP BY pour agréger les résultats de la même heure, jour, semaine, mois, trimestre, etc. Vous pouvez également utiliser cette fonction dans un INSERT . SELECT dans une table partitionnée pour diviser les valeurs TIMESTAMP ou DATE dans la partition correcte.

  • TIMESTAMP si le deuxième argument, ts , est TIMESTAMP .
  • DATE si le deuxième argument, ts , est DATE .

DATE_TRUNC('HOUR', NOW()) renvoie 2017-12-05 13:00:00 .

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

DATEDIFF(TIMESTAMP / DATE date de fin, TIMESTAMP / DATE date de début) Objectif: Renvoie le nombre de jours entre startdate et enddate .

Si enddate > startdate , la valeur de retour est positive.

Si enddate < startdate , la valeur de retour est négative.

Si enddate = startdate , la valeur de retour est zéro.

Type de retour : INT

Remarques d'utilisation :

Les portions d'heure des valeurs de date de fin et de date de début sont ignorées. Par exemple, 23:59 un jour et 00:01 le lendemain représentent un DATEDIFF() de -1 car les valeurs date/heure représentent des jours différents, même si les valeurs TIMESTAMP ne diffèrent que de 2 minutes.

JOUR(TIMESTAMP/DATE date), DAYOFMONTH(TIMESTAMP/DATE date) Objectif: Renvoie la valeur du jour à partir de l'argument date. La valeur représente le jour du mois, elle est donc comprise entre 1 et 31, ou moins pour les mois sans 31 jours.

Renvoie NULL pour les dates inexistantes, par ex. 30 février ou chaînes de date mal formatées, par ex. '1999-02-013'.

Type de retour : INT

DAYNAME(TIMESTAMP / DATE date) Objectif: Renvoie le nom du jour de l'argument date. La plage des valeurs de retour va du « dimanche » au « samedi » . Utilisé dans les requêtes générant des rapports, comme alternative à l'appel de DAYOFWEEK() et à la transformation de cette valeur de retour numérique en une chaîne à l'aide d'une expression CASE.

Type de retour : CHAÎNE

JOUR DE LA SEMAINE(TIMESTAMP / DATE date) Objectif: Renvoie le champ jour de l'argument de date, correspondant au jour de la semaine. La plage des valeurs de retour est de 1 (dimanche) à 7 (samedi).

Type de retour : INT

DAYOFYEAR(TIMESTAMP / DATE date) Objectif: Renvoie le champ jour à partir de l'argument date, correspondant au jour de l'année. La plage des valeurs de retour va de 1 (1er janvier) à 366 (31 décembre d'une année bissextile).

Type de retour : INT

DAYS_ADD(TIMESTAMP / DATE date, INT / BIGINT jours) Objectif: Renvoie la valeur avec le nombre de jours ajoutés à ce jour.

Argument: La valeur de l'argument unit n'est pas sensible à la casse. La chaîne d'unité peut être l'une des suivantes :

Unité Pris en charge pour TIMESTAMP ts Pris en charge pour DATE ts
'ÉPOQUE' Oui Non
'MILLISECONDE' Oui Non
'DEUXIÈME' Oui Non
'MINUTE' Oui Non
'HEURE' Oui Non
'JOURNÉE' Oui Oui
'MOIS' Oui Oui
'TRIMESTRE' Oui Oui
'AN' Oui Oui

Remarques d'utilisation :

Généralement utilisé dans les requêtes GROUP BY pour organiser les résultats par heure, jour, mois, etc. Vous pouvez également utiliser cette fonction dans un INSERT . Instruction SELECT à insérer dans une table partitionnée pour diviser les valeurs TIMESTAMP en parties individuelles, si la table partitionnée comporte des colonnes de clé de partition distinctes représentant l'année, le mois, le jour, etc. Si vous devez diviser par des unités de temps plus complexes, telles que par semaine ou par trimestre, utilisez plutôt la fonction TRUNC().

Type de retour : BIGINT

EXTRAIT(DAY FROM DATE'2019-08-17') renvoie 17 .

Si vous spécifiez 'MILLISECOND' pour l'argument unité, la fonction renvoie le composant des secondes et le composant des millisecondes.

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

FROM_TIMESTAMP(TIMESTAMP datetime, modèle STRING), FROM_TIMESTAMP(STRING datetime, modèle STRING) Objectif: Convertit une valeur TIMESTAMP en une chaîne représentant la même valeur.

Type de retour : CHAÎNE

Remarques d'utilisation :

La fonction FROM_TIMESTAMP() fournit un moyen flexible de convertir les valeurs TIMESTAMP en formats de chaîne arbitraires à des fins de génération de rapports.

Étant donné qu'Impala convertit implicitement les valeurs de chaîne en TIMESTAMP , vous pouvez transmettre des valeurs de date/heure représentées sous forme de chaînes (au format standard aaaa-MM-jj HH:mm:ss.SSS) à cette fonction. Le résultat est une chaîne utilisant différents caractères de séparation, ordre des champs, noms de mois épelés ou autre variation de la représentation de la chaîne date/heure.

Les jetons autorisés pour la chaîne de modèle sont les mêmes que pour la fonction FROM_UNIXTIME().

FROM_UNIXTIME(BIGINT unixtime [, modèle STRING]) Objectif: Convertit le nombre de secondes de l'époque Unix à l'heure spécifiée en une chaîne dans le fuseau horaire local.

Type de retour : CHAÎNE

La chaîne de modèle prend en charge le sous-ensemble suivant de Java SimpleDateFormat.

Schéma La description
oui An
M Mois
Jour
H Heure
m Minute
s Deuxième
S Seconde fractionnaire
+/-hh:mm Décalage de fuseau horaire
+/-hhmm Décalage de fuseau horaire
+/-hh Décalage de fuseau horaire

Les règles suivantes s'appliquent à la chaîne de modèle :

  • La chaîne de modèle est sensible à la casse.
  • 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. Par example:
    • 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.