我有一个查询,如下所示,其中一个名为“ListOfDate”的参数以字符串形式出现在前端...在mysql中的日期时间数据类型为“ENCOUNTERDATE”..
SELECT d.encounterdate,
d.hospitalid,
amiop1,
amiop2,
amiop3,
amiop4,
amiop5,
amiop16
FROM factopami f,
dimpatientencounter d
WHERE d.hospitalid = 987654
AND d.measurecategory = 'AMI'
AND ( encounterdate IN ( ** listofdate ** )
OR encounterdate IS NULL )
AND d.patientid = f.patientid
AND d.id = f.patientencounterid
ORDER BY encounterdate;
之后我尝试将ListOfDate转换为日期:
SELECT d.encounterdate, d.hospitalid, amiop1, amiop2, amiop3, amiop4,
amiop5, amiop16
FROM factopami f, dimpatientencounter d
WHERE d.hospitalid = 987654
AND d.measurecategory = 'AMI'
AND ( encounterdate IN (str_to_date ('01-10-2012' '%m-%d-%Y'))
OR encounterdate IS NULL
)
AND d.patientid = f.patientid
AND d.ID = f.patientencounterid
ORDER BY encounterdate;
正在为单个字符串工作......但是我得到了一个字符串列表,它给了我错误..
SELECT d.encounterdate,
d.hospitalid,
amiop1,
amiop2,
amiop3,
amiop4,
amiop5,
amiop16
FROM factopami f,
dimpatientencounter d
WHERE d.hospitalid = 987654
AND d.measurecategory = 'AMI'
AND ( encounterdate IN ( Str_to_date('01-10-2012', '01-10-2012',
'%m-%d-%Y') )
OR encounterdate IS NULL )
AND d.patientid = f.patientid
AND d.id = f.patientencounterid
ORDER BY encounterdate;
LIMIT 0,1000错误代码:1582。调用本机函数'STR_TO_DATE'0.000秒
时参数计数不正确所以如何将它转换为mysql级别
答案 0 :(得分:1)
简而言之 - 目前您将列表转换为:
(encounterdate IN ( STR_TO_DATE('01-10-2012','01-10-2012', '%m-%d-%Y'))
相反,您需要将其转换为:
( encounterdate IN ( STR_TO_DATE('01-10-2012', '%m-%d-%Y')
, STR_TO_DATE('01-10-2012', '%m-%d-%Y') )
作为更多解释,IN运算符期待一系列事物:
encounterdate IN ( thing1, thing2, thing3 )
你传递的东西是约会,这意味着你这样做:
encounterdate IN ( date1, date2, date3 )
唉,你有字符串而不是日期,因此你需要将每个字符串转换为日期。因此,您需要进行一些转换。
date1 needs to be STR_TO_DATE( string1, '%m-%d-%y )
date2 needs to be STR_TO_DATE( string2, '%m-%d-%y )
date3 needs to be STR_TO_DATE( string3, '%m-%d-%y )
总而言之,你需要生成:
encounterdate IN ( STR_TO_DATE('01-10-2012', '%m-%d-%Y')
, STR_TO_DATE('01-10-2012', '%m-%d-%Y')
, STR_TO_DATE('01-10-2012', '%m-%d-%Y')
作为替代方案,如果您认为无法生成此内容,则可以翻转转换,然后使用encounterdate
将DATE_FORMAT
列转换为字符串你做比较。
此处的文档:
这将导致:
DATE_FORMAT( encounterdate, '%m-%d-%Y' ) IN ( '01-10-2012'
, '01-10-2012'
, '01-10-2012' )
但是,您应该记住,这会对encounterdate
的索引产生影响,尽管这可能不是您的用例中的问题。
答案 1 :(得分:0)
正如在mysql手册中解释的那样,str_to_date函数只获取参数。第一个参数是你的日期字符串,第二个参数是日期字符串的格式。所以你不能这样使用它:
STR_TO_DATE('01-10-2012','01-10-2012', '%m-%d-%Y')
你应该用这个:
STR_TO_DATE('01-10-2012', '%m-%d-%Y'),STR_TO_DATE('01-10-2012', '%m-%d-%Y')