Dans ma table
LoginDate
2013-08-29 13:55:48
Le type de données de la colonne loginDate
est nvarchar(150)
Je souhaite convertir la colonne logindate
au format date-heure à l'aide de la commande SQL
Résultat attendu.
LoginDate
29-08-2013 13:55:48
DECLARE @chr nvarchar(50) = (SELECT CONVERT(nvarchar(50), GETDATE(), 103))
SELECT @chr chars, CONVERT(date, @chr, 103) date_again
SELECT CONVERT(NVARCHAR, LoginDate, 105)+' '+CONVERT(NVARCHAR, LoginDate, 108) AS LoginDate FROM YourTable
Output
-------------------
29-08-2013 13:55:48
alter table your_table
alter column LoginDate datetime;
Comme vos données sont nvarchar, il n'y a aucune garantie qu'elles seront converties en datetime (car elles peuvent contenir des informations de date/heure non valides) - donc un moyen de gérer cela est d'utiliser ISDATE que j'utiliserais dans une application croisée. (Les résultats de l'application croisée sont réutilisables, ce qui facilite les formats de sortie.)
| YOUR_DT | SQL2008 |
|-----------------------------|---------------------|
| 2013-08-29 13:55:48 | 29-08-2013 13:55:48 |
| 2013-08-29 13:55:48 blah | (null) |
| 2013-08-29 13:55:48 rubbish | (null) |
SELECT
[Your_Dt]
, convert(varchar, ca1.dt_converted ,105) + ' ' + convert(varchar, ca1.dt_converted ,8) AS sql2008
FROM your_table
CROSS apply ( SELECT CASE WHEN isdate([Your_Dt]) = 1
THEN convert(datetime,[Your_Dt])
ELSE NULL
END
) AS ca1 (dt_converted)
;
Remarques:
Vous pouvez également introduire left ([Your_Dt], 19) pour n'obtenir qu'une chaîne comme '2013-08-29 13:55:48' de '2013-08-29 13:55:48 poubelles'
Pour cette sortie spécifique, je pense que vous aurez besoin de 2 styles de date 2008 sql (105 & 8) sql2012 ajoutés pour comparaison
declare @your_dt as datetime2
set @your_dt = '2013-08-29 13:55:48'
select
FORMAT(@your_dt, 'dd-MM-yyyy H:m:s') as sql2012
, convert(varchar, @your_dt ,105) + ' ' + convert(varchar, @your_dt ,8) as sql2008
| SQL2012 | SQL2008 |
|---------------------|---------------------|
| 29-08-2013 13:55:48 | 29-08-2013 13:55:48 |
et ça
--// Convert NVARCHAR to DATETIME
DECLARE @date DATETIME = (SELECT convert(DATETIME, '2013-08-29 13:55:48', 120))
--// Convert DATETIME to custom NVARCHAR FORMAT
SELECT
RIGHT('00'+ CAST(DAY(@date) AS NVARCHAR),2) + '-' +
RIGHT('00'+ CAST(MONTH(@date) AS NVARCHAR),2) + '-' +
CAST(YEAR(@date) AS NVARCHAR) + ' ' +
CAST(CONVERT(TIME,@date) AS NVARCHAR)
résultat: '29 -08-2013 13: 55: 48.0000000 '
Qu'est-ce que tu ne veux pas faire exactement? Pour modifier le type de données de la colonne, vous pouvez simplement utiliser la commande alter comme
ALTER TABLE nom_table ALTER COLUMN LoginDate DateTime;
Mais rappelez-vous que la date ne doit être valide que dans cette colonne, mais le type de données est nvarchar.
Si vous ne souhaitez pas convertir le type de données lors de la récupération des données, vous pouvez utiliser la fonction CONVERT comme,
CONVERT (type_données (longueur), expression, style)
par exemple:
SELECT CONVERT (DateTime, loginDate, 6)
Cela renverra le 29 août 13. Pour plus de détails sur la fonction CONVERT, vous pouvez visiter,
http://www.w3schools.com/sql/func_convert.asp .
N'oubliez pas, utilisez toujours le type de données DataTime pour la colonne DateTime.
Merci