2017-08-30 174 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设置如何都可以正确解释。