web-dev-qa-db-fra.com

Comment convertir datetime en date uniquement (avec l'heure définie sur 00: 00: 00.000)

J'ai une chaîne '2009-06-24 09: 52: 43.000', que je dois insérer dans une colonne DateTime d'une table.

Mais le temps m'importe peu, je veux juste l'insérer comme 2009-06-24 00: 00: 00.000

Comment puis-je faire cela dans T-SQL?

11
Saobi

Pour SQL Server 2005 et inférieur:

CONVERT(varchar(8), @ParamDate, 112)    -- Supported way

CAST(FLOOR(CAST(@ParamDate AS float)) AS DATETIME)   -- Unsupported way

Pour SQL Server 2008 et versions ultérieures:

CAST(@ParamDate AS DATE)
13
GSerg
declare @originalDate datetime
select @originalDate = '2009-06-24 09:52:43.000'

declare @withoutTime datetime
select @withoutTime = dateadd(d, datediff(d, 0, @originalDate), 0)

select @withoutTime
10
Kevin Newman
SELECT CAST(CONVERT(VARCHAR,GETDATE(),102) AS DATETIME)

SELECT CAST(CONVERT(VARCHAR(10),'2009-06-24 09:52:43.000',102) AS DATETIME)
6
DBAndrew

Une amélioration de la version non prise en charge: je ne suis pas sûr que cela puisse affecter les performances. getdate() est un horodatage d'entrée dans ma requête.

select cast(cast(getdate() as DATE) as DATETIME)

2
sanBV

James a raison. Si vous commencez avec une chaîne et que le format sera toujours celui que vous dites, alors restez simple et efficace. Utilisez LEFT( @StrDate, 10) et CONVERT avec votre valeur datetime. Terminé.

Si votre chaîne d'entrée peut être n'importe quel format de date/heure valide, vous devez d'abord utiliser CONVERT(datetime, @StrDate). Après cela, vous allez avec ce que Bing vient de dire pour enlever la partie temps.

2
TimF

lancez-le à une date, puis vous pourrez utiliser CONVERT pour obtenir uniquement la date.

INSERT MyTable(Column1)
SELECT CONVERT(CHAR(8), CAST('2009-06-24 09:52:43.000' AS DATETIME), 112)
1
Scott Ivey

Probablement un moyen plus propre et plus portable de le faire, mais mon idiome de plusieurs années est:

insert into tbl (date_column)
select convert(varchar, convert (datetime, '2009-06-24 09:52:43.000'), 101)
0
Eric H.

Si vous avez toujours la date dans le même format, c’est-à-dire aaaa-MM-JJ, vous pouvez saisir les 10 premiers caractères si la valeur et insérer celle qui équivaut à 00: 00: 00.0000 fois pour cette date.

select left('2009-12-32 4:32:00',10)

C'est un moyen très efficace de le faire, car il ne nécessite pas de conversion de types de données, MAIS il faut que la date soit toujours formatée avec une année à quatre chiffres et un jour et un mois à deux chiffres.

0
James Conigliaro

Une variété de hacks:

  • Convertissez votre chaîne en date/heure, puis utilisez le paramètre optionnel "style" en convert pour convertir votre date/heure en chaîne en utilisant uniquement la partie date.
  • utilisez substring pour couper la fin
  • autour de la date/heure en utilisant floor
0
Jeremy Smyth

J'ai trouvé ce casting comme une date, puis à une date-heure très efficace et intuitif.

 SELECT CAST(CAST(GETDATE() as date) as datetime)
0
Tyler Facker