4

我的简介是实现一个接口,该接口的方法类似于下面的“GetValuesSqlStatement”:

public string SqlPattern { get { ... } }
//this varies; eg. "SELECT name FROM someTable WHERE startDate < {0}"

public string DatabaseType { get { ... } }
//this varies; eg. "SqlServer"

public string GetValuesSqlStatement(List<object> paramValues)
{
    //...desired logic here, using DatabaseType, SqlPattern and paramValues
}

现在,因为这必须产生一个可执行的 SQL 语句,所以我不能在执行查询时使用参数。而且我必须实现的接口是不可协商的。确保数据库查询引擎正确解释结果中的日期的最佳方法是什么?假设 paramValues 包含 .NET DateTime 对象,在插入 SQL 模式字符串之前应该如何将它们格式化为字符串?must 数据库中最常见的通用日期格式是什么?(例如'dd-mmm-yyyy'之类的东西)。

注意:我只需要担心 2005 年以后的 Sql Server 和 Oracle 10g 以后的版本。所以 SQL 必须是有效的 T SQL 和 PL SQL,并且在两种风格中都意味着相同的东西。

4

3 回答 3

1

如果您在任何数据库中使用日期格式 'yyyy-mm-dd' 应该没问题。这是根据 ISO 8601 ( http://www.iso.org/iso/date_and_time_format )

于 2011-09-23T02:56:13.173 回答
1

我认为 SQL Server 唯一明确的日期格式是 YYYYMMDD:

Oracle 使用 DATE 'YYYY-MM-DD' 表示法:

http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/sql_elements003.htm#BABGIGCJ

虽然在某些情况下可能有一种同时适用于这两种情况的表示法,但我怀疑是否有一种表示法适用于所有可能的区域服务器设置。

就像你说的,YYYY-MON-DD 可能有用——这是 Oracle 的默认设置。

于 2011-09-23T02:56:44.763 回答
0

我对此提供了自己的答案,即使它偏离了问题的范围,因为它可能对其他有类似问题的人有用。

我刚刚意识到我可以简单地期望每个实例(或世界不同地区的每个客户)在参数占位符的后半部分有选择地指定格式字符串。例如。执行:

public string SqlPattern { get {
    return "SELECT name FROM someTable WHERE startDate < {0:yyyy-mm-dd}";
} }  

然后我的组件根本不需要担心如何格式化日期。默认情况下,我可以使用 'yyyymmdd' 或者甚至更好地使用服务器的文化来选择默认值。否则使用自定义指定的模式。这将是一种通用方法,适用于其他需要格式化为 SQL 字符串的类型。

于 2011-09-23T03:28:59.683 回答