Je voudrais faire cela dans le SQL INSERT. Quelqu'un peut-il me montrer.SQL Server Convertir DD/MM/YY en AAAA-JJ-MM
Merci
--Mark
Je voudrais faire cela dans le SQL INSERT. Quelqu'un peut-il me montrer.SQL Server Convertir DD/MM/YY en AAAA-JJ-MM
Merci
--Mark
Quelque chose comme cela devrait fonctionner:
insert into TableName(DateColumn)
select convert(datetime,getDate(),103)
121 est aaaa-mm-jj – pjp
@pjp: Donc, il est maintenant corrigé. –
+1 - La fonction de conversion devrait faire ce dont vous avez besoin. –
Je ne suis pas sûr que je suis tout à fait, mais si vous prenez un datetime
de la forme 'jj/mm/aa' et j'essaie de l'obtenir dans un varchar(10)
du formulaire yyyy-dd-mm
alors je pense yo u'll besoin de se convertir à un varchar puis utilisez SUBSTRING
, LEFT
et RIGHT
pour retirer les données dont vous avez besoin:
declare @dt datetime
select @dt = getdate() -- i.e. 04/09/2009
declare @str varchar(8)
select @str = convert(varchar(8),@dt,112) --gives 20090904
select LEFT(@str,4) + '-' + RIGHT(@str,2) + '-' + SUBSTRING(@str,5,2) -- gives 2009-04-09
Il est pas joli, mais ça marche!
Je préférerais aller pour une fonction de formatage de date plus générale que le piratage du format au cas par cas :) – pjp
Jetez un oeil à cette fonction de formatage de date personnalisé à partir http://anubhavg.wordpress.com/2009/06/11/how-to-format-datetime-date-in-sql-server-2005/
Cela vous permet de formater les dates de toute façon que vous voulez. Cependant je ne suis pas sûr pourquoi vous voudriez une date dans le format YYYY-DD-MM
car c'est plutôt non-standard.
————
– SQL datetime functions
– SQL Server date formats
– T-SQL convert dates
– Formatting dates sql server
CREATE FUNCTION dbo.fnFormatDate (@Datetime DATETIME, @FormatMask VARCHAR(32))
RETURNS VARCHAR(32)
AS
BEGIN
DECLARE @StringDate VARCHAR(32)
SET @StringDate = @FormatMask
IF (CHARINDEX ('YYYY',@StringDate) > 0)
SET @StringDate = REPLACE(@StringDate, 'YYYY',
DATENAME(YY, @Datetime))
IF (CHARINDEX ('YY',@StringDate) > 0)
SET @StringDate = REPLACE(@StringDate, 'YY',
RIGHT(DATENAME(YY, @Datetime),2))
IF (CHARINDEX ('Month',@StringDate) > 0)
SET @StringDate = REPLACE(@StringDate, 'Month',
DATENAME(MM, @Datetime))
IF (CHARINDEX ('MON',@StringDate COLLATE SQL_Latin1_General_CP1_CS_AS)>0)
SET @StringDate = REPLACE(@StringDate, 'MON',
LEFT(UPPER(DATENAME(MM, @Datetime)),3))
IF (CHARINDEX ('Mon',@StringDate) > 0)
SET @StringDate = REPLACE(@StringDate, 'Mon',
LEFT(DATENAME(MM, @Datetime),3))
IF (CHARINDEX ('MM',@StringDate) > 0)
SET @StringDate = REPLACE(@StringDate, 'MM',
RIGHT('0'+CONVERT(VARCHAR,DATEPART(MM, @Datetime)),2))
IF (CHARINDEX ('M',@StringDate) > 0)
SET @StringDate = REPLACE(@StringDate, 'M',
CONVERT(VARCHAR,DATEPART(MM, @Datetime)))
IF (CHARINDEX ('DD',@StringDate) > 0)
SET @StringDate = REPLACE(@StringDate, 'DD',
RIGHT('0'+DATENAME(DD, @Datetime),2))
IF (CHARINDEX ('D',@StringDate) > 0)
SET @StringDate = REPLACE(@StringDate, 'D',
DATENAME(DD, @Datetime))
RETURN @StringDate
END
Ensuite, vous pouvez appeler ceci: SELECT dbo.fnFormatDate (getdate(), 'YYYY-DD-MM')
+1 Pour effort pur - gentil! – butterchicken
Hmm wars de vote ... jeux amusants enfants ... S'il vous plaît laissez des commentaires avec des notes down. – pjp
Nous ne savons pas si YY
en DD/MM/YY
est dans le siècle en cours ou siècle précédent. Par exemple, si YY
est 15
, nous ne savons pas si c'est 1915
ou 2015
. Donc les nombres entre 0 et 15 seront traités comme siècle actuel. Si l'année en cours est 2016, alors les nombres entre 0 et 16 seront traités comme siècle actuel (sa dynamique).
EXEMPLE
YY
est 15
, alors YYYY
seront 2015
.YY
est 97
, alors YYYY
sera 1997
.QUERY
DECLARE @DATECOL VARCHAR(13) = '25/01/15'
SELECT CASE WHEN RIGHT(@DATECOL,2) BETWEEN 0 AND CAST(RIGHT(YEAR(GETDATE()),2)AS INT)
THEN '20' + RIGHT(@DATECOL,2) ELSE '19' + RIGHT(@DATECOL,2) END
+ '-' + LEFT(@DATECOL,2) + '-' + LEFT(RIGHT(@DATECOL,5),2)
est la date DateTime ou (var) char? – pjp
Il s'agit d'un datetime – madphp
Aussi devrait-il être YYYY-DD-MM – pjp