2015-01-14 16 views
5

che sto sostituendo il mio codice C# per motivi di prestazioni con una query SQL:Come posso selezionare un datetime come ggMMyy, quindi un anno a due cifre?

CreatedAt.ToString("ddMMyy", System.Globalization.CultureInfo.InvariantCulture) 

restituisce la creazione-date 140115 (per oggi). Abbastanza semplice in C#, ma come faccio a ottenere questo in T-SQL?

ho provato:

REPLACE(CONVERT(CHAR(10), ChargeArrival.CreatedAt, 103), '/', '') 

che è quasi in modo corretto, ma l'anno ha quattro cifre invece di due, in modo da 14012015 invece di 140115.

+0

Io non sono convinto che questo si esibiranno meglio . Anche la conversione del tipo di dati non è gratuita in SQL Server. –

+0

@AaronBertrand: non è la conversione della data che fa parte dell'ottimizzazione ma la sostituzione di LINQ-To-SQL in cui l'oggetto contiene campi complessi che vengono inizializzati da altre query del database. Ora sto usando una vista che contiene tutti i campi rilevanti. Ci sono voluti 20 secondi per selezionare 100 righe (caricare 100 oggetti), ora solo una frazione di secondo. –

+1

Ok, non era chiaro, sembrava che il problema di efficienza stava semplicemente applicando la formattazione in C#. –

risposta

8

Come lo stato docs for CONVERT, usare 103 se si desidera che il secolo e 3 se non:

REPLACE(CONVERT(CHAR(10), ChargeArrival.CreatedAt, 3), '/', '') 
+0

Grazie. Mancavo la foresta per gli alberi. –

+1

Ogni giorno il suo nuovo apprendimento in SO. –

3

È possibile utilizzare questo anche

SELECT REPLACE(CONVERT(CHAR(10), ChargeArrival.CreatedAt, 5), '-', '')