2013-08-31 40 views
1

爲什麼如果我這樣做,我的SQL Server 2008上:爲什麼如果我用西班牙語設置「默認語言」,GETDATE()仍然用英文格式化日期?

EXEC sp_configure 'default language', 5 
reconfigure 

如日期格式爲DD/MM/YYYY:

select * from sys.syslanguages where langid = 5 

回報

dateformat 
---------- 
dmy 

所以,如果我做

select GETDATE() 

我在等待這樣的:

(no column name) 
---------------- 
31/08/2013 13:20:44.590 

,但我得到:

(no column name) 
---------------- 
2013-08-31 13:20:44.590 

我使用的是SQL-Server 2008 Express的兼容模式100

新增:

我真正的問題是我需要將日期以dd/mm/yyyy hh:mm傳遞給DATETIME變量,但解析器仍在等待yyyy-mm-dd,儘管我更改了默認語言。

謝謝

+0

爲什麼你 「需要通過」 d/M/Y?爲什麼不傳遞明確的日期格式?通過使用令人困惑的日期格式你會獲得什麼? –

回答

1

以下將是由Management Studio中呈現,不論服務器設置:

SELECT GETDATE(); 

這是一個日期時間值返回到客戶端應用程序,而不是一個字符串。如果你想要一個字符串,你可以明確地轉換爲一個特定的樣式:

至於輸入到你的存儲過程請,請通過適當的日期時間參數而不是字符串。如果你真的不知道9月6日還是6月9日,那麼沒有理由讓用戶輸入像6/9/2013這樣的免費文字。傳遞給SQL Server的安全格式爲:

YYYYMMDD HH:MM:SS.nnn 
YYYY-MM-DDTHH:MM:SS.nnn 

其他任何情況都可能被誤解。這就是爲什麼除了演示/顯示的最後一步,你不應該將它們當作字符串處理。

+0

感謝您的回覆!問題是我的應用程序(ASP.NET MVC)位於「en」,因爲是一個西班牙語應用程序,我將glogal語言環境更改爲「es」,所以現在默認日期字符串格式爲DD/MM/YYYY(女巫對我來說很好),但是根據你的建議,我必須在使用DateTime作爲輸入的所有存儲過程調用中進行重新格式化,我有很多,我只需要查看所有代碼爲此:) – Santiago

+1

@Santiago爲什麼你必須做任何重新格式化?您對存儲過程的調用應該使用DateTime參數,而不是字符串。期。 –

0

你可以使用這樣

Select CONVERT(varchar(100), GETDATE(),103)+' ' 
+CONVERT(varchar(100), GETDATE(),108) as now 

結果是enter image description here

相關問題