如何在日期时间内翻转月份和日期?

问题描述:

如何翻转“2012- 12-01 12:33:00.0”变为“2012- 01-12 12:33:00.0”?我试过“选择转换(varchar(50),convert(datetime,log_date,103),121)”并同时使用101和103,但仍然无法翻转它。如何在日期时间内翻转月份和日期?

的数据库是MS SQL

+1

不这样做的SQL。在需要显示日期时间时在应用程序中执行此操作。 – Oded 2012-04-19 09:48:27

+0

不,我不能。原因是因为数据错误地填充了。所以我需要修复这些数据。其他日期字段格式正确。因此,我不能只为这个领域改变应用程序。数据必须更正。 – cooldude 2012-04-19 09:52:43

+0

你是什么意思?日期是否正确? DateTime值**没有格式** - 这是SSMS向您显示的方式。 – Oded 2012-04-19 09:54:08

DECLARE @date DATETIME 
SET DATEFORMAT ydm 
SET @date = '2012-12-01 12:33:00.0' 
SELECT @date 

SET DATEFORMAT ydm会给你你需要的格式的结果。

其他选项

UPDATE Table_Name 
SET COLUMN_NAME= convert(varchar(20), convert(Date, @date, 101)) + convert(varchar(30),convert(time, @date)) 
WHERE 

OR

select convert(datetime, convert(varchar(100), @date), 20) 
+0

感谢Hayer,我怎样才能使用它作为UPDATE语句的一部分?有很多记录需要更新。 – cooldude 2012-04-19 09:58:38

+0

我认为最简单的方法是用函数返回正确的格式。但是它扫描查询执行时间变慢。必须有一个合适的方法来做到这一点。尝试谷歌。 – Scorpion 2012-04-19 10:10:33

+0

@cooldude请检查更新的查询 – Scorpion 2012-04-19 10:30:21

你可以只执行一些字符串操作(注:未经测试的代码)

UPDATE table 
SET date= 
    LEFT(CONVERT(VARCHAR(50),date,128),4) -- '2012' 
    +SUBSTRING(CONVERT(VARCHAR(50),date,128),7,3) -- '-01' 
    +SUBSTRING(CONVERT(VARCHAR(50),date,128),4,3) -- '-12' 
    +RIGHT(CONVERT(VARCHAR(50),date,128),LEN(CONVERT(VARCHAR(50),date,128))-10) -- ' 12:33:00.0'