gpt4 book ai didi

C、unixODBC、oracle 和日期查询

转载 作者:行者123 更新时间:2023-11-30 18:04:20 25 4
gpt4 key购买 nike

我有一个类似的查询

select x from tableName where startDate <= now;

当我查询没有日期字段的数据库时,一切都按预期进行。一旦我开始在 Oracle 数据库中使用日期或时间戳列,我的查询就不会返回任何内容或返回错误。

我做什么:

snprintf(sql, sizeof(sql), "SELECT roomNo, userPass, adminPass, adminFlags, userFlags, bookId, is_locked, running_on_server FROM booking WHERE roomNo = '?' AND startTime <=  { ts '?' }  AND endTime >= { ts '?' } for update;");                              
stmt = ast_odbc_prepare_and_execute(obj, generic_prepare, &gps);

的?将被值替换,使用以下命令:

SQLBindParameter(stmt, i + 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR,  strlen(gps->argv[i]), 0, gps->argv[i], 0, NULL);

当我执行查询时,我收到一条错误,指出 TS 是无效标识符 [这是另一个委员会的建议,取自 msdn - 这可能会导致此错误]

但即使我删除它并仅向数据库发送一个字符串,我也会得到一个空结果。我还尝试将参数绑定(bind)为 SQL_TIMESTAMP 和 SQL_DATE,但这也没有帮助。

希望有人能帮助我。

提前致谢。克里斯

最佳答案

您是向 Oracle 查询发送 DATE 数据类型还是以字符串表示的日期?

从 Oracle 方面来看,如果您在字符串变量中发送日期,则需要使用 Oracle“TO_DATE”函数 ( http://www.techonthenet.com/oracle/functions/to_date.php ) 将字符串转换回日期以在 SQL 中使用语句(假设 startDate 或 startTime/endTime 是数据库中的 DATE 列)。

您的第一个 SQL 示例应该是:

SELECT x 
FROM tableName
WHERE startDate <= TO_DATE(now, '<date-format>');

如果变量“now”是包含“05-OCT-2011 16:15:23”(包括时间部分)的字符串,则 to_date 将为:

TO_DATE(now, 'DD-MON-YYYY HH24:MI:SS')

如果将字符串与日期进行比较,但未指定该日期的格式,Oracle 将使用其默认 NLS 参数并尝试应用该格式。因此,使用 TO_DATE 指定日期格式始终是谨慎的做法。

希望对你有帮助...

关于C、unixODBC、oracle 和日期查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7657679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com