2012-04-19 25 views
-1

我有一個存儲日期值的列。但是,一些日期是如何以錯誤的格式填充的。該列的日期格式爲DD/MM/YYYY,但日期填充爲MM/DD/YYYY。我如何將MM/DD/YYYY的值更改爲DD/MM/YYYY?例如。此時,它顯示03/05/2012,它被讀作3rd May 2012,因此它確實應該被填充爲05/03/20125th March 2012)。如何將日期重新更新爲其他格式?

以上已解決,但我有類似的問題: 如何翻轉「2012年12月1日12:33:00.0」成爲「2012年1月12日12:33:00.0」?我試過「選擇轉換(varchar(50),convert(datetime,log_date,103),121)」並同時使用101和103,但仍然無法翻轉它。

+0

如果列的類型是「date」,「datetime」或「datetime2」,則它不具有*格式。另外 - 所有*的日期「存儲」不正確?如果不是,我們如何區分需要翻轉的日期和那些不需要翻轉的日期? – 2012-04-19 06:18:49

+0

嗨達米安。很容易確定哪個日期需要翻轉。日期列不應大於當前日期。 – cooldude 2012-04-19 07:20:29

+0

但是01/03/2012是1月3日還是3月1日?兩者都在過去。 – 2012-04-19 07:27:04

回答

0

可以使用convert function爲字符串和datetime值之間進行轉換。

Convert a DD/MM/YYYY string to a datetime: convert(datetime, value, 103) 
Convert a datetime to a DD/MM/YYYY string: convert(varchar(10), value, 103) 
Convert a MM/DD/YYYY string to a datetime: convert(datetime, value, 101) 
Convert a datetime to a MM/DD/YYYY string: convert(varchar(10), value, 101) 

您需要哪些這些取決於您是否已將日期存儲爲表中的varchar或datetime。

+0

我想將MM/DD/YYYY值轉換爲DD/MM/YYYY值。 – cooldude 2012-04-19 07:01:25

+0

@cooldude:然後你使用第三個將字符串轉換爲日期時間值,然後第二個將日期時間值轉換爲字符串:convert(varchar(10),convert(datetime,value,101),103)' 。 – Guffa 2012-04-19 07:46:27

+0

謝謝!這工作。我可否知道101和103旁邊還有什麼其他參數?什麼是YYYY-MM-DD的格式hh:mi:ss.mmm和YYYY-DD-MM hh:mi:ss.mmm? – cooldude 2012-04-19 08:13:18

0

我不知道日期是如何進入你的專欄的。但轉換功能可以幫助在這裏:

SELECT convert(datetime, '03/05/2012',103) 

你可能看到這個MSDN文章爲不同的日期和時間風格在: http://msdn.microsoft.com/de-de/library/ms187928.aspx

希望這有助於。

順便說一句:如果問題只是它如何存儲在表本身,你應該看看你的文化背景。在這裏你會發現不同的SYS語言的日期格式:

select * from sys.syslanguages 
+0

從excel文件錯誤地填充了錯誤的日期。這就是爲什麼我現在正在清理它們。我會看看你的轉換函數,看看它是否有幫助。 – cooldude 2012-04-19 06:55:56

+0

嗨,我已經使用了轉換功能,但它沒有幫助。實際上我想要做的是對這些不良數據執行UPDATE。我想將03/05/2012的現有值轉換爲05/03/2012 – cooldude 2012-04-19 07:00:16

0

日期存儲爲一個時間點,但不是一種特殊的風格。如何返回給您可能取決於數據庫的語言/文化設置。

我想你可以使用SELECT CONVERT(...)來得到你想要的任何格式。以下是一些示例:http://www.sql-server-helper.com/tips/date-formats.aspx

+0

嗨,我已經使用了轉換功能,但它沒有幫助。實際上我想要做的是對這些不良數據執行UPDATE。我想將現有價值03/05/2012轉換爲05/03/2012 – cooldude 2012-04-19 07:00:34

+0

@cooldude我同意Damien_The_Unbeliever在您的問題下的評論。如果列處於日期類型中,則此列中的數據實際上本身沒有格式,因此您無需嘗試轉換值。問題只是數據庫在返回時如何呈現數據。 – Hailei 2012-04-19 07:12:22

+0

@cooldude我不知道這對你是否有用:http://blogs.msdn.com/b/sqlserverfaq/archive/2009/11/13/how-to-change-date-format-after-installing -sql-server.aspx – Hailei 2012-04-19 07:14:30