【问题标题】:SQL Server error for different date format of Regional date format and Database date format区域日期格式和数据库日期格式的不同日期格式的 SQL Server 错误
【发布时间】:2017-08-30 10:07:32
【问题描述】:

我的区域日期设置设置为

yyyymmdd

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

mm/dd/yyyy

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

我的代码是用 Delphi7 编写的。

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

select * 
from EMPLOYEE 
where JOINING_DATE > '08292017'

在上述查询中,预计日期为08/29/201708-29-2017

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

GetLocaleChar(DefaultLCID, LOCALE_SDATE, '/')

在哪里

DefaultLCID := GetThreadLocale;

另一个问题:在 SQL Server 中,无论数据库列中使用何种分隔符,我们使用哪个分隔符是否重要?

【问题讨论】:

标签: sql-server date delphi datetime delphi-7


【解决方案1】:

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

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

当它从数据库中获取记录时,它会触发一个查询 如下所示: select * from EMPLOYEE where JOINING_DATE > '08292017'

我建议您简单地对查询进行参数化,而不是传递日期文字字符串。这将避免日期格式字符串问题,并提供其他好处,例如性能和安全性。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 2019-08-19
    • 2010-12-14
    • 2017-05-12
    • 1970-01-01
    相关资源
    最近更新 更多