sql-server - yyyy - sql time format




Comparer une chaîne de date à datetime dans SQL Server? (12)

Cette fonction Cast (Floor (Cast (GetDate () As Float)) Comme DateTime) renvoie un type datetime avec la partie temps supprimée et pourrait être utilisé comme tel.

Select
*
Table1
Where
Cast(Floor(Cast(Column_DateTime As Float)) As DateTime) = '14-AUG-2008'

ou

DECLARE  @p_date DATETIME
SET      @p_date = Cast('14 AUG 2008' as DateTime)

SELECT   *
FROM     table1
WHERE    Cast(Floor(Cast(column_datetime As Float)) As DateTime) = @p_date

Dans SQL Server, j'ai une colonne DATETIME qui inclut un élément de temps.

Exemple:

'14 AUG 2008 14:23:019'

Quelle est la meilleure méthode pour sélectionner uniquement les enregistrements pour un jour particulier, en ignorant la partie temps?

Exemple: (Pas sûr, car il ne correspond pas à la partie temps et ne retourne aucune ligne)

DECLARE  @p_date DATETIME
SET      @p_date = CONVERT( DATETIME, '14 AUG 2008', 106 )

SELECT *
FROM   table1
WHERE  column_datetime = @p_date

Note: Étant donné que ce site est aussi à noter des notes et des techniques que vous ramasser puis oublier, je vais poster ma propre réponse à cette question car DATETIME stuff dans MSSQL est probablement le sujet que je recherche le plus dans SQLBOL.

Mettre à jour l' exemple clarifié pour être plus précis.

Modifier Désolé, mais j'ai dû modifier les mauvaises réponses (réponses qui retournent des résultats erronés).

@Jorrit: WHERE (date>'20080813' AND date<'20080815') retournera le 13 et le 14.

@wearejimbo: Fermer, mais pas de cigare! badge attribué à vous. Vous avez raté des records écrits au 14/08/2008 23: 59: 001 à 23: 59: 999 (ie Moins d'une seconde avant minuit.)


Comparez simplement les valeurs de l'année, du mois et du jour.

Declare @DateToSearch DateTime
Set @DateToSearch = '14 AUG 2008'

SELECT * 
FROM table1
WHERE Year(column_datetime) = Year(@DateToSearch)
      AND Month(column_datetime) = Month(@DateToSearch)
      AND Day(column_datetime) = Day(@DateToSearch)

Quelque chose comme ça?

SELECT  *
FROM    table1
WHERE   convert(varchar, column_datetime, 111) = '2008/08/14'

Technique 2:

DECLARE @p_date DATETIME
SET     @p_date = CONVERT( DATETIME, '14 AUG 2008', 106 )

SELECT  *
FROM    table1
WHERE   DATEDIFF( d, column_datetime, @p_date ) = 0

Si le champ column_datetime n'est pas indexé et qu'il est peu probable qu'il le soit (ou que l'index soit peu utilisé), l'utilisation de DATEDIFF () est plus courte.


Dans SQL Server 2008, vous pouvez utiliser le nouveau type de données DATE

DECLARE @pDate DATE='2008-08-14'  

SELECT colA, colB
FROM table1
WHERE convert(date, colDateTime) = @pDate  

@Gars. Je pense que vous trouverez que cette solution s'adapte bien. Regardez le plan d'exécution de la requête de votre requête d'origine.

Et pour moi :


Comment obtenir la partie DATE d'un champ DATETIME dans MS SQL Server:

L'un des moyens les plus rapides et les plus simples de le faire est d'utiliser

DATEADD(dd, DATEDIFF( dd, 0, @DAY ), 0)

Cela évite que le processeur ne casse la logique en "convertissant la date en une chaîne sans le temps, puis en la convertissant de nouveau".

Il n'expose pas non plus l'implémentation interne que la "partie temps est exprimée en fraction" de la date.

Obtenez la date du premier jour du mois

DATEADD(dd, DATEDIFF( dd, -1, GetDate() - DAY(GetDate()) ), 0)

Obtenez la date rfom il y a 1 an

DATEADD(m,-12,DATEADD(dd, DATEDIFF( dd, -1, GetDate() - DAY(GetDate()) ), 0))

La date peut être comparée dans sqlserver à l'aide de la comparaison de chaînes:

DECLARE @strDate VARCHAR(15)
SET @strDate ='07-12-2010'


SELECT * FROM table
WHERE CONVERT(VARCHAR(15),dtInvoice, 112)>= CONVERT(VARCHAR(15),@strDate , 112)

Je convertis normalement la date et l'heure et les compare, comme ceci:

SELECT 'Same Date' WHERE CAST(getDate() as date) = cast('2/24/2012 2:23 PM' as date)

ou

SELECT 'Same Date' WHERE DATEDIFF(dd, cast(getDate() as date), cast('2/24/2012 2:23 PM' as date)) = 0

Le meilleur moyen est d'extraire simplement la partie date en utilisant la fonction SQL DATE ():

SELECT * 
FROM table1
WHERE DATE(column_datetime) = @p_date;

Dans sqlserver

DECLARE @p_date DATE

SELECT * 
FROM table1
WHERE column_dateTime[email protected]p_date

En C # Passez la chaîne courte de la valeur de date en utilisant la fonction ToShortDateString (). exemple: DateVariable.ToShortDateString ();


SELECT CONVERT(VARCHAR(2),DATEPART("dd",doj)) + 
    '/' + CONVERT(VARCHAR(2),DATEPART("mm",doj)) + 
    '/' + CONVERT(VARCHAR(4),DATEPART("yy",doj)) FROM emp

SELECT * FROM tablename
WHERE CAST(FLOOR(CAST(column_datetime AS FLOAT))AS DATETIME) = '30 jan 2012'




datetime