sql-server - yyyy - sql time format
Comparer une chaîne de date à datetime dans SQL Server? (12)
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.)
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
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'