将日期格式SQL转换为YYYY-MM-DD HH:MM:SS

将日期格式SQL转换为YYYY-MM-DD HH:MM:SS,sql,sql-server,Sql,Sql Server,我目前的日期格式是2016-11-23 16:47:21.007,我正在尝试用以下SQL转换它: updateuser\u table set login\u date=CONVERT(datetime,login\u date,120) 所以我只得到了2016-11-23 16:47:21,但它目前只是保持相同的格式 我遗漏了什么吗?您当前的需求主要是演示需要。由于您的登录\u日期已存储为日期时间,因此无需在数据库内部进行任何更改 当您需要以毫秒为单位显示登录日期时,请继续按原样调用转换: S

我目前的日期格式是
2016-11-23 16:47:21.007
,我正在尝试用以下SQL转换它:

updateuser\u table set login\u date=CONVERT(datetime,login\u date,120)

所以我只得到了
2016-11-23 16:47:21
,但它目前只是保持相同的格式


我遗漏了什么吗?

您当前的需求主要是演示需要。由于您的
登录\u日期
已存储为
日期时间
,因此无需在数据库内部进行任何更改

当您需要以毫秒为单位显示登录日期时,请继续按原样调用转换:

SELECT CONVERT(varchar(19), login_date, 120) AS login_date_no_millis
FROM yourTable

但是没有必要进行您在问题中向我们展示的
更新。

您当前的需求主要是演示需要。由于您的
登录\u日期
已存储为
日期时间
,因此无需在数据库内部进行任何更改

当您需要以毫秒为单位显示登录日期时,请继续按原样调用转换:

SELECT CONVERT(varchar(19), login_date, 120) AS login_date_no_millis
FROM yourTable

但是没有必要进行您在问题中向我们展示的
更新。

将列更改为数据类型datetime2(0)将意味着不存储毫秒。如果你确定你不需要它们


同样,在select中将其强制转换为datetime2(0)将在表示级别执行相同的操作,同时在数据库中保留毫秒(如果需要)。这也意味着,与cast/convert to varchar不同,如果这对应用程序有影响,它仍然是一个日期时间值而不是字符串。

将列更改为数据类型datetime2(0)将意味着不存储毫秒。如果你确定你不需要它们


同样,在select中将其强制转换为datetime2(0)将在表示级别执行相同的操作,同时在数据库中保留毫秒(如果需要)。也就是说,与cast/convert to varchar不同的是,如果这对应用程序有影响的话,它仍然是一个datetime值而不是字符串。

预期的输出格式是什么?login_date是datetime还是varchar?您的
login_date
列似乎已经是
datetime
,因此,没有必要重新格式化它,因为它没有内在的格式。您只需要在输出时进行格式化,而不是在存储时进行格式化。我希望此格式
2016-11-23 16:47:21.007
转换为此格式
2016-11-23 16:47:21
基本上不需要milliseconds@TimBiegeleisenMSSQL将把
varchar
值隐式解析为
datetime
。这就是它没有失败的原因。预期的输出格式是什么?login\u date是datetime还是varchar?您的
login\u date
列似乎已经是
datetime
,因此无需重新格式化,因为它没有固有格式。您只需要在输出时进行格式化,而不是在存储时进行格式化。我希望此格式
2016-11-23 16:47:21.007
转换为此格式
2016-11-23 16:47:21
基本上不需要milliseconds@TimBiegeleisenMSSQL将把
varchar
值隐式解析为
datetime
。这就是它没有失败的原因。转换不需要varchar而不是datetime吗?您应该为
varchar
-指定一个长度,但也因为在这种情况下,您可以使用该长度忽略毫秒,这是OP要求的。这里没有实际影响,但您可能也可以使用
char
,因为输出的长度总是相同的。还值得一提的是,您不需要varchar而不是转换的日期时间吗?您应该为
varchar
-指定一个长度,但也因为在这种情况下,您可以使用该长度来省略毫秒,这就是OP的要求。这里没有真正的影响,但您可能也可以使用
char
,因为输出的长度总是相同的。这一点也值得一提