区域日期格式和数据库日期格式的不同日期格式的SQL Server错误

Pra*_*oni 4 sql-server delphi datetime date delphi-7

我的区域日期设置设置为

yyyymmdd
Run Code Online (Sandbox Code Playgroud)

现在,我的SQL Server的默认DateTime设置为

mm/dd/yyyy
Run Code Online (Sandbox Code Playgroud)

我的数据库列的数据类型为DateTime,并且它包含的值与数据库的格式相同.

我的代码是用Delphi7编写的.

当它从数据库中取出记录时,会触发如下所示的查询:

select * 
from EMPLOYEE 
where JOINING_DATE > '08292017'
Run Code Online (Sandbox Code Playgroud)

在上面的查询中,预期日期是08/29/201708-29-2017.

在Delphi 7中,我使用GetLocaleChar方法从区域设置中获取分隔符的值; 下面是这个代码:

GetLocaleChar(DefaultLCID, LOCALE_SDATE, '/')
Run Code Online (Sandbox Code Playgroud)

哪里

DefaultLCID := GetThreadLocale;
Run Code Online (Sandbox Code Playgroud)

另一个问题:在SQL Server中,我们使用哪个分隔符而不管数据库列中使用的分隔符是否重要?

Dan*_*man 6

我的数据库字段的数据类型为 - DateTime,它包含的值与数据库的格式相同.

SQL Server中的日期时间值采用二进制格式.mm/dd/yyyy日期时间值的字符串值完全由应用程序表示层控制.

当它从数据库中取出记录时,会触发如下所示的查询:从EMPLOYEE中选择*,其中JOINING_DATE>'08292017'

我建议您只是参数化查询而不是传递日期文字字符串.这将避免日期格式字符串问题,并提供性能和安全性等其他好处.

如果必须将日期或日期时间文本传递给SQL Server,请使用未分离的YYYYMMDD格式,以便无论SQL会话DATEFORMAT设置如何都能正确解释.