gpt4 book ai didi

delphi - 在 SQL 中使用参数时,字符串转换错误

转载 作者:行者123 更新时间:2023-12-03 15:46:43 26 4
gpt4 key购买 nike

使用 Delphi 2010(Firebird [测试]、MS Sql Server、Oracle [生产])

以下是我的SQL

SELECT p.script_no, MIN(p.start_Time) as startTime, MAX(p.end_Time) as endTime, 
SUM(p.duration) as TotalDuration
FROM phase_times p
WHERE (p.script_no=:scriptNo) AND (Trunc(p.start_time) >= :beginDateRange) AND (Trunc(p.start_time) <= :endDateRange)
GROUP BY p.script_no



ParamByName('beginDateRange').AsDate:= Date - 30;
ParamByName('endDateRange').AsDate:= Date;

我收到“字符串转换错误 - 10-25-2012”,我不知道为什么,因为我的日期时间字段在数据库中采用“10/25/2012 9:20:49 AM”格式.

如果我将其更改为以下内容:ParamByName('beginDateRange').AsString := formatDateTime('mm/dd/yyyy',Date - 30).....我收到错误“字符串转换错误 - 2012 年 10 月 25 日“

研究这个错误并没有给我提供新的途径,你有什么想法吗?

最佳答案

根据Interbase 6.0手册,嵌入式SQL指南,第7章,Firebird支持YYYY-MM-DD和YYYY-MM-DD HH:MM:SS.qqq的转换。我还相信它支持美式简写日期(例如 1-JAN-2012)进行转换。

可能支持一些与区域设置相关的转换,但一般来说:使用实际的日期/时间戳类型而不是字符串。

更新我最初没有发现 TRUNC在您的查询中:这是转换错误的原因,因为此函数仅适用于数字,请参阅 manual entry for TRUNC .

鉴于您的评论(以及ain的回复),我假设您只对日期部分感兴趣,并且想忽略时间。如果是这样,请重写 TRUNC 的使用至:

CAST(<your-timestamp-field> AS DATE)

条件(Trunc(p.start_time) >= :beginDateRange) AND (Trunc(p.start_time) <= :endDateRange)至:

CAST(p.start_time AS DATE) BETWEEN :beginDateRange AND :endDateRange

关于delphi - 在 SQL 中使用参数时,字符串转换错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13071007/

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