我需要每天自动使用sql查询来自soap。 对DB的查询具有当前日期。
所以,我这样做了:
1)我使用groovy将当前日期设置为属性:
def dateTime= new Date()
setProperty.setPropertyValue('currDate', String.format("%tF", dateTime, new Date()))
2)在jdbc请求中我创建了相应的属性,并尝试在查询中使用它:
select * ...
where SENDDATE = :Date
但是尝试执行查询会导致数据类型不匹配。
2015-02-04 17:17:54 - Error getting response; java.sql.SQLException: Data type mismatch. (2015-02-04)
所以,我的问题是:在这种情况下如何避免不匹配?
注意:查询在' 2015-02-02'直接填写日期。
梅德
答案 0 :(得分:0)
您可以使用SQL来确定日期,然后它将始终采用正确的格式:
select * ...
where SENDDATE = now()
答案 1 :(得分:0)
由于@SiKing建议您可以使用SQL函数,请注意,如果您使用的是sqlserver而不是now()
,则必须使用GETDATE()
:
select * ...
where SENDDATE = GETDATE()
无论如何,如果你想使用你的参数而不是函数,有时似乎字符串不能作为日期工作,你可以尝试使用格式函数将字符串转换为日期,因为我不清楚你使用的是什么数据库我告诉你以下案例:
<强>预言强>
select * ...
where SENDDATE = TO_DATE(:Date, 'yyyy-mm-dd')
<强>的MySQL 强>
select * ...
where SENDDATE = STR_TO_DATE(:Date, '%Y-%m-%d')
<强> SQLSERVER 强>
select * ...
where SENDDATE = CONVERT(DATETIME,:Date,20)
sqlserver案例不太直观,20是yyyy-mm-dd hh:mi:ss
的格式,所以我不确定你是否可以转换2015-02-04
也许你要追加hh:mi:ss在你的groovy为2015-02-04 00:00:00
希望这有帮助,
答案 2 :(得分:0)
首先,确保你的mysql字段数据类型是相关的(它应该是&#39; date&#39; not time(),text,varchar等。)
关于groovy格式化方式,以下是:
import groovy.time.*
def dateTime= new Date().format('yyyy/MM/dd')
testRunner.testCase.testSteps["Properties"].setPropertyValue('currDate',dateTime.toString())
JDBC(mysql Engine)查询:
select * ...
where SENDDATE = '${Properties#currDate}'
备注:强>