2017-08-30 121 views
3

我的區域日期設置爲SQL Server錯誤

yyyymmdd 

現在,我的SQL Server有默認DateTime設置爲

mm/dd/yyyy 

我的數據庫列的數據類型爲DateTime,它包含的值與數據庫的格式相同。

我的代碼是用Delphi7編寫的。

當它來從數據庫fetcch記錄,它觸發查詢類似如下:

select * 
from EMPLOYEE 
where JOINING_DATE > '08292017' 

在上面的查詢,預產期爲08/29/201708-29-2017。在Delphi 7中,我使用GetLocaleChar方法從區域設置中獲取分隔符的值;在Delphi 7中,我使用GetLocaleChar方法從區域設置中獲取分隔符的值;使用GetLocaleChar下面是該代碼:

GetLocaleChar(DefaultLCID, LOCALE_SDATE, '/') 

其中

DefaultLCID := GetThreadLocale; 

另一個問題是:它在SQL Server中,其分離器,我們使用的是不論數據庫列使用分離器的重要嗎?

+2

使用參數化查詢,你應該沒問題。 – Victoria

+2

除此之外,你應該參數化你的查詢這可以是一個有趣的閱讀http://www.karaszi.com/SQLServer/info_datetime.asp#DtFormatsInput – GuidoG

回答

6

我的數據庫字段的數據類型爲 - DateTime,它包含的值與數據庫的格式相同。

SQL Server中的日期時間值是二進制格式。日期時間值的字符串值mm/dd/yyyy完全由應用程序表示層控制。

當它來從數據庫fetcch記錄,它觸發查詢 類似如下:選擇employee *其中JOINING_DATE> 「08292017」

我建議你乾脆參數化查詢而不是傳遞日期文字字符串。這將避免日期格式字符串問題,並提供其他好處,如性能和安全性。

如果您必須將日期或日期時間文字傳遞給SQL Server,請使用未分隔的YYYYMMDD格式,以便無論SQL會話DATEFORMAT設置如何都可以正確解釋。