2013-09-24 392 views
0

你知道我可以如何將yyyy-dd-mm hh:mm:ss轉換爲yyyy-mm -dd hh:mm:ss在SQL Server 2008中?SQL Server日期轉換 - yyyy-dd-mm hh:mm:ss到yyyy-mm-dd hh:mm:s

我試過SELECT convert(varchar, StateChangeTime, 120) from History,但它不能告訴9日之間的差異,例如一個月和一天,所以什麼都不做。 stateChangeTime是DATETIME2

例如日期我想轉換2013-03-09 19:29:25應該2013-09-03 19:29:25

幫助!

+0

我在這裏失去了一些東西。如果您調用'CONVERT()'函數詢問字符串類型的輸出,如varchar,那麼它需要日期類型的輸入,如datetime。但是你在說'StateChangeTime'也是一個varchar。要麼通過將日期值存儲爲字符串來做一些非常糟糕的事情(不要這麼做!),要麼你對日期時間值的存儲方式感到困惑。日期時間值以不可讀的二進制格式存儲,並且只能以查詢工具讀取的方式顯示。 –

+0

在SQL Server識別的任何格式中,沒有yyy​​y-dd-mm格式,因此您需要在組件中切割字符串並重新排列它們。 – Guffa

+0

stateChangeTime是一個dateTime2類型,更新後的問題 – Fearghal

回答

-1

如何在SQL Server中存儲日期?是否爲datetime列類型。如果是,那麼格式化會以它向您顯示的方式應用(由於語言環境設置)。

121 formatter選項將以您想要的格式將其作爲字符串返回。

SELECT convert(nvarchar, getdate(), 121) 
--returns 2013-09-24 15:51:14.363 

如果另一方面它被存儲爲一個字符串,那麼你將需要做一些字符串操作。

+0

如果日期存儲爲字符串,則可以嘗試將字符串轉換或轉換爲'datetime',然後使用此答案中所述的'convert'函數。 –

+0

是的,但如果它是一個字符串,並且由於客戶端上的某些內容而被存儲爲yyyy-dd-mm,並且服務器區域設置預計爲yyyy-mm-dd,那麼服務器將解析該字符串ass-ways和將8月9日和9月8日的mm和dd轉置。 –

+0

嗨,是stateChangeTime是一個dateTime2。更新的問題。 – Fearghal

0
  1. 這是我的理解:你的源存儲在VARCHAR格式(不作爲datetime)。
  2. 您想將該自定義格式的字符串源轉換爲可解析的格式。

嘗試這些MS-SQL語句:

/***** 
Your Source is in a custom-format string */ 
DECLARE @vsInpYYYYDDMM varchar(64) 
SET @vsInpYYYYDDMM = '2013-03-09 19:29:25' 

/***** 
Convert that source YYYY-DD-MM format to YYYY-MM-DD format */ 
DECLARE @vsActualYYYYMMDD varchar(64) 
SET @vsActualYYYYMMDD = substring(@vsInpYYYYDDMM, 1,4) + '-' + substring(@vsInpYYYYDDMM, 9, 2) + '-' + substring(@vsInpYYYYDDMM, 6, 2) + ' ' + substring(@vsInpYYYYDDMM,12,99) 

PRINT @vsActualYYYYMMDD + ' is a String' 

/***** 
Convert that into an actual DATETIME variable */ 
DECLARE @dtDateVar as datetime 
SET @dtDateVar = CONVERT(datetime, @vsActualYYYYMMDD, 120) 
PRINT CONVERT(varchar, @dtDateVar, 120) + ' is a DateTime'