2014-06-18 32 views
0

我從某些外部數據源獲取數據並需要存儲在SQL服務器表中。但其中一個是Datetime。但我得到的日期時間字段爲Varchar格式,現在在我的SQL表中,我需要將它保存爲DateTime數據類型。SQL中的日期時間類型轉換

CONVERT(DATETIME,[Date_time],03) 

- 此代碼在我的開發環境中工作,但不在生產中。

CONVERT(DATETIME,[Date_time],120) 

- 此代碼在我的生產中工作,但不在開發中。

由於我必須對測試代碼進行更改,這使我很難將代碼從開發轉移到生產。

請注意,我正在使用SQL Server 2008 R2。

有沒有辦法讓我的代碼類似?我無法更改這兩個服務器上的文化和語言,因爲在那裏部署了許多其他應用程序,它可能會破壞這兩個服務器中的現有應用程序

+0

爲什麼你的生產和開發環境會有不同的文化?有什麼不對勁。 –

+0

我猜你有一些.net代碼使用來自外部數據源的數據......我不是很熟悉.NET的方式,但是我們的代碼顯然需要一些條件語句,這取決於它運行的環境。您可以嘗試發出select @@ Version SQL,並根據返回的結果有條件語句來處理不同的環境。這裏是一些更多的信息 - http://msdn.microsoft.com/en-us/library/ms177512.aspx ---希望這會有所幫助。 – TMNT2014

+0

SQL的版本是相同的,但正如我所說的,文化是不同的,所以需要使用不同風格的轉換。我已經向我的經理提出這個問題,爲什麼這兩個環境有不同的文化?但我甚至不得不嘗試自己找到一種方法來解決這個問題。 – Nijith

回答

0

解決問題的方法是提供一個功能,爲每個環境計算(或定義)正確的樣式。這個最簡單的選項是用戶定義的功能。

CREATE FUNCTION [dbo].[fnCustomDateStyle]() 
RETURN int AS 
BEGIN 
    RETURN 3 # Or 120, in the other environment 
END 

可以在這樣每個環境中使用:

CONVERT(DATETIME, [Date_Time], fnCustomDateStyle()) 
+0

我從過去使用相同的方法。但是看看是否有其他標準方式。當服務器名稱發生變化時,我需要更改Bcoz這個代碼。 – Nijith

+0

無論如何,我可以通過編寫sql查詢來獲取SQL Server Culture Info嗎? – Nijith

0

你可以嘗試使用SET語句覆蓋的日期格式,像這樣:

SET DATEFORMAT mdy; 
SELECT CONVERT(DATETIME, [Date_Time], 120); 

只要當你在這兩種環境中的存儲過程/查詢中包含這些代碼時,這應該沒問題。您可能需要閱讀MSDN