web-dev-qa-db-fra.com

Comment obtenir la partie date à partir d'une colonne date avec horodatage dans SQL Server?

Je veux obtenir la date au format DDMMYYY à partir d'un champ qui stocke la date au format YYYY-MM-DD Timestamp. (Par exemple, '2018-11-09' devrait afficher '09Nov2018').

Je sais qu'une façon consiste à utiliser la fonction datepart ( https://docs.Microsoft.com/en-us/sql/t-sql/functions/datepart-transact-sql?view = sql-server-2017 ) qui peut extraire l'année, le mois et le jour individuellement et ensuite je peux les concaténer.

Edit: je ne veux pas utiliser getdate(). Il y a une colonne qui a le format YYYY-MM-DD Timestamp Et de cette colonne j'extraye 'DDMM2018'. J'utilise:

concat
(
  CONVERT(varchar, DATEPART(dd,columndate)), 
  CONVERT(varchar, LEFT(DATENAME(month, DATEPART(month,columndate)),3)) , 
  CONVERT(varchar, DATEPART(year, columndate))
) AS trial

Cela me donne '9Nov2018' Et non '09Nov2018'. Je prévois de reconvertir ceci en `type de données 'car c'est ainsi que je veux le résultat.

Existe-t-il un autre moyen d'y parvenir?

Toutes les idées/suggestions très appréciées.

2
T.H.

Voici un exemple utilisant GETDATE():

SELECT REPLACE(CONVERT(char(11), GETDATE(), 13),' ','');

Donne 12Nov2018. Il y a trois jours, cela donnerait 09Nov2018.

Pour exécuter cela sur votre table:

SELECT Trial = REPLACE(CONVERT(char(11), YOUR_COLUMN_NAME_HERE, 13),' ','')
  FROM dbo.YOUR_TABLE_NAME_HERE;

Dans SQL Server 2012 et versions ultérieures, vous pouvez utiliser FORMAT() mais, comme Tibor l'a suggéré, cela utilise plus de CPU (doublant approximativement le temps d'exécution dans mes tests ).

SELECT FORMAT(GETDATE(), 'ddMMMyyyy');
5
Aaron Bertrand

SELECT Replace (Convert (nvarchar (100), YourDate, 106), '', '') donne le résultat souhaité enter image description here

0
Momo