En étudiant SQL Server, je ne suis pas sûr de quelque chose:
Un champ datetime
avec la valeur: 2012-02-26 09:34:00.000
Si je choisis hors de la table en utilisant:
CAST(dob2 AS VARCHAR(12) ) AS d1
Il le formate comme suit: Feb 26 2012
Ce que je ne sais pas de son comment ou pourquoi SQL Server formate DateTime comme ça. Si vous utilisez datetime2
ce n'est pas le cas - quelqu'un sait pourquoi?
Le format de date par défaut dépend du paramètre de langue du serveur de base de données. Vous pouvez aussi le changer par session , comme:
set language french
select cast(getdate() as varchar(50))
-->
févr 8 2013 9:45AM
essaye ça:
select convert(varchar, dob2, 101)
select convert(varchar, dob2, 102)
select convert(varchar, dob2, 103)
select convert(varchar, dob2, 104)
select convert(varchar, dob2, 105)
select convert(varchar, dob2, 106)
select convert(varchar, dob2, 107)
select convert(varchar, dob2, 108)
select convert(varchar, dob2, 109)
select convert(varchar, dob2, 110)
select convert(varchar, dob2, 111)
select convert(varchar, dob2, 112)
select convert(varchar, dob2, 113)
refernces: http://msdn.Microsoft.com/en-us/library/ms187928.aspx
Compatibility Supports _ Indique que Sous le niveau de compatibilité 110, le style par défaut des opérations CAST and CONVERT
sur les types de données time
et datetime2
est toujours 121. Si votre requête repose sur l'ancien comportement , utilisez un niveau de compatibilité inférieur à 110 ou spécifiez explicitement le style 0 dans la requête concernée.
Cela signifie que par défautdatetime2
estCAST as varchar
à121 format
. Pour ex; Les formats col1
etcol2
(ci-dessous) sont identiques (autres que les 0 à la fin)
SELECT CONVERT(varchar, GETDATE(), 121) col1,
CAST(convert(datetime2,GETDATE()) as varchar) col2,
CAST(GETDATE() as varchar) col3
--Results
COL1 | COL2 | COL3
2013-02-08 09:53:56.223 | 2013-02-08 09:53:56.2230000 | Feb 8 2013 9:53AM
Pour votre information, si vous utilisez CONVERT
au lieu de CAST
, vous pouvez utiliser un troisième paramètre pour spécifier certains formats énumérés ici sur MSDN
Dans MS SQL Server, vous pouvez faire:
SET DATEFORMAT ymd
case when isdate(inputdate) = 1
then convert(datetime, cast(inputdate,datetime2), 103)
else
case when isdate(inputdate) = 0
then convert(datetime, cast(inputdate,datetime2), 103)
Ceci est mon utilisation préférée de 112 et 114 Select (convert (varchar, getdate (), 112)) + replace (convert (varchar, getdate (), 114), ':', '')) en tant que 'Getdate ( ) 112 + 114 ou YYYYMMDDHHMMSSMSS '
Résultat: Getdate () 112 + 114 ou YYYYMMDDHHMMSSSS
20171016083349100