Utilisation de DATETIME dans la clause WHERE dans SQL Server

Aniello Lettieri

J'ai cette question

SELECT  
    [MsgNumber], [StateAfter],
    DATETIMEFROMPARTS (SUBSTRING([TimeString], 7, 4), 
                       SUBSTRING([TimeString], 4, 2), 
                       SUBSTRING([TimeString], 1, 2),
                       SUBSTRING([TimeString], 12, 2), 
                       SUBSTRING([TimeString], 15, 2), 
                       SUBSTRING([TimeString], 18, 2), 0) AS dt
FROM 
    TABLE
WHERE 
    [MsgNumber] IN (5, 9, 13, 17)
ORDER BY 
    dt ASC, StateAfter ASC

SORTIE (ok):

+-----------+-----------+-------------------------+
| MsgNumber | tateAfter |           dt            |
+-----------+-----------+-------------------------+
|         9 |         1 | 2018-03-09 17:22:00.000 |
|         9 |         0 | 2018-03-09 17:23:37.000 |
|        17 |         1 | 2018-03-09 17:23:37.000 |
|        17 |         1 | 2018-03-09 17:29:43.000 |
|        17 |         1 | 2018-03-09 17:36:21.000 |
+-----------+-----------+-------------------------+

Je veux ajouter une condition sur la date; pour éviter une erreur dans le codage datetime interne, j'utilise la fonction DATETIMEFROMPARTS comme ça

SELECT [MsgNumber],[StateAfter]
,DATETIMEFROMPARTS ( SUBSTRING ( [TimeString] ,7 , 4 ), SUBSTRING ( [TimeString] ,4 , 2 ), SUBSTRING ( [TimeString] ,1 , 2 ),
                    SUBSTRING ( [TimeString] ,12 , 2 ), SUBSTRING ( [TimeString] ,15 , 2 ), SUBSTRING ( [TimeString] ,18 , 2 ) , 0) as dt
FROM TABLE
WHERE [MsgNumber] IN (5,9,13,17) AND (dt > DATETIMEFROMPARTS(2018,4,9,0,0,0,0) and dt <  DATETIMEFROMPARTS(2018,5,9,0,0,0,0))
ORDER BY dt ASC,StateAfter ASC

ERREUR:-

Msg 207, niveau 16, état 1, ligne 5
Nom de colonne non valide 'dt'.
Msg 207, niveau 16, état 1, ligne 5
Nom de colonne non valide 'dt'.

Quelqu'un peut-il m'aider à comprendre pourquoi cela ne fonctionne pas? J'ai essayé aussi la clause BETWEEN; Merci

Gordon Linoff

Vous ne pouvez pas faire référence à un alias de colonne dans la whereclause. Les solutions typiques consistent à utiliser des sous-requêtes ou des CTE. Mais SQL Server a une autre méthode que je l' aime, apply:

SELECT [MsgNumber], [StateAfter], v.dt
FROM TABLE t CROSS APPLY
     (VALUES (DATETIMEFROMPARTS(SUBSTRING ([TimeString], 7, 4), SUBSTRING([TimeString], 4, 2), SUBSTRING([TimeString], 1, 2),
                    SUBSTRING([TimeString], 12, 2), SUBSTRING( [TimeString], 15, 2), SUBSTRING([TimeString], 18, 2), 0)
             )
     ) V(dt)
WHERE [MsgNumber] IN (5, 9, 13, 17) AND
      v.dt > DATETIMEFROMPARTS(2018, 4, 9, 0, 0, 0, 0) AND
      v.dt <  DATETIMEFROMPARTS(2018, 5, 9, 0, 0, 0, 0))
ORDER BY dt ASC,StateAfter ASC;

Je trouve curieux que vous n'utilisiez pas le plus simple:

WHERE [MsgNumber] IN (5, 9, 13, 17) AND
      v.dt > '20180409'  AND
      v.dt < '20180509'

(Je n'ai pas utilisé de tirets car ce format sera toujours interprété comme AAAAMMJJ quels que soient les paramètres d'internationalisation.)

Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.

En cas d'infraction, veuillez [email protected] Supprimer.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

Utilisation de la clause IN dans SQL Server

Utilisation de l'index datetime dans la clause where MySQL

Utilisation de 'as' dans la clause 'WHERE' dans Spark SQL

Utilisation de la sous-requête dans la clause Group By ou where SQL Server

Utilisation d'un CASE ou IF..ELSE dans la partie AND de la clause WHERE - SQL Server

SQL Server - l'utilisation de DATALENGTH dans la clause where provoque une erreur de troncature

Utilisation de toutes les sous-requêtes sur la clause where à compter dans SQL Server

Utilisation de NULL dans la clause WHERE

Utilisation de CASE dans la clause WHERE?

Utilisation d'opérateurs de comparaison dans la clause where dans SQL Server 2008 R2

Fuseau horaire de SQL Server dans la clause where

Instruction SQL Server CASE dans la clause Where de Select

Utilisation de l'instruction IF dans une clause Where dans SQL Server

Utilisation de USER dans la clause WHERE d'une vue dans Oracle Sql Developer

Utilisation de l'instruction Case dans la clause Where dans le développeur SQL

Utilisation de l'instruction Case dans la clause Where dans Oracle SQL

SQL Utilisation de la sous-requête dans la clause where et utilisation des valeurs dans select

Utilisation d'alias dans la clause WHERE SQL

Utilisation du nom d'alias dans la clause where - SQL

Utilisation d'une colonne de bits dans une clause where SQL Server

Utilisation de la variable MySQL dans la clause WHERE

Utilisation de la date dans la clause where, MYSQLI

Utilisation de la virgule T (Ț) dans la clause where

Erreur lors de l'utilisation de la clause WHERE dans Linq-to-SQL

Comment utiliser la clause Where lors de l'utilisation de XML dans SQL ?

Utilisation de l'instruction IF dans la clause WHERE de Postgres

utilisation dynamique de sqlalchemy de and_ dans la clause where

Utilisation de l'expression de cas dans la clause where

Utilisation de deux ensembles de conditions dans la clause where

TOP liste

  1. 1

    comment afficher un bouton au-dessus d'un autre élément ?

  2. 2

    impossible d'obtenir l'image d'arrière-plan en plein écran dans reactjs

  3. 3

    Je continue à obtenir l'objet 'WSGIRequest' n'a pas d'attribut 'Get' sur django

  4. 4

    comment supprimer "compte de connexion google" à des fins de développement - actions sur google

  5. 5

    Conversion double en BigDecimal en Java

  6. 6

    Impossible d'accéder à la vue personnalisée pendant le test de l'interface utilisateur dans XCode

  7. 7

    Algorithme: diviser de manière optimale une chaîne en 3 sous-chaînes

  8. 8

    Passer la taille d'un tableau 2D à une fonction ?

  9. 9

    Comment obtenir l'intégration contextuelle d'une phrase dans une phrase à l'aide de BERT ?

  10. 10

    Comment changer le navigateur par défaut en Microsoft Edge pour Jupyter Notebook sous Windows 10 ?

  11. 11

    CSS: before ne fonctionne pas sur certains éléments,: after fonctionne très bien

  12. 12

    Comment créer un bot à compte à rebours dans Discord en utilisant Python

  13. 13

    Comment ajouter une entrée à une table de base de données pour une combinaison de deux tables

  14. 14

    Exporter la table de l'arborescence vers CSV avec mise en forme

  15. 15

    Comment activer le message Pylint "too-many-locals" dans VS Code?

  16. 16

    Créer un système Buzzer à l'aide de python

  17. 17

    Spring @RequestParam DateTime format comme ISO 8601 Date Heure facultative

  18. 18

    Empêcher l'allocation de mémoire dans la génération de combinaison récursive

  19. 19

    Déplacement des moindres carrés d'ajustement pour les déplacements de points ayant des problèmes

  20. 20

    Comment choisir le nombre de fragments et de répliques Elasticsearch

  21. 21

    Microsoft.WebApplication.targets

chaudétiquette

Archive