2012-04-19 128 views
2

如何翻轉「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

回答

2
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

0

你可以只執行一些字符串操作(注:未經測試的代碼)

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' 
相關問題