mysql中转换为日期的字符串的逗号分隔列表
我有一个如下所示的查询,其中一个名为“ListOfDate”的参数以字符串的形式出现在前端。我在mysql中有一个datetime数据类型为“ENCOUNTERDATE”的参数mysql中转换为日期的字符串的逗号分隔列表,mysql,sql,database,mysql-workbench,Mysql,Sql,Database,Mysql Workbench,我有一个如下所示的查询,其中一个名为“ListOfDate”的参数以字符串的形式出现在前端。我在mysql中有一个datetime数据类型为“ENCOUNTERDATE”的参数 SELECT d.encounterdate, d.hospitalid, amiop1, amiop2, amiop3, amiop4, amiop5, amiop16 FROM factopami f
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;
限制0,1000错误代码:1582。调用本机函数“STR_to_DATE”0.000秒时参数计数不正确
那么,我如何将其转换为mysql级别的简言之——在您将列表转换为:
(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')
作为一种替代方法,如果您觉得不可能产生此结果,您可以在进行比较时翻转转换,使用日期格式
将遇到日期
列转换为字符串
此处的文档:
DATE_FORMAT( encounterdate, '%m-%d-%Y' ) IN ( '01-10-2012'
, '01-10-2012'
, '01-10-2012' )
但是,您应该记住,这将对
遇到日期的索引产生影响,尽管这在您的用例中可能不是问题。正如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')
我想您可以将encounterdate转换为字符串——使用DATE_格式,尽管这会限制该列上索引的使用。在您的特定用例中,这可能不是问题。请看这里: