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?
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)
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
SELECT CAST(CONVERT(VARCHAR,GETDATE(),102) AS DATETIME)
SELECT CAST(CONVERT(VARCHAR(10),'2009-06-24 09:52:43.000',102) AS DATETIME)
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)
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.
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)
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)
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.
Une variété de hacks:
convert
pour convertir votre date/heure en chaîne en utilisant uniquement la partie date.substring
pour couper la finfloor
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)