2013-12-06 3 views
0

У меня есть 1 запрос, как показано ниже, где параметр с именем «ListOfDate», который поступает по интерфейсу в виде строки..i имеет «ENCOUNTERDATE» в mysql с datetime datatype ..разделенный запятой список строки, преобразованный в дату в mysql

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 сек

так, как я могу преобразовать его на уровне тузд

ответ

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, хотя это может и не быть проблемой в вашем случае использования.

+0

благодаря Робу для replying..i имеют динамический параметр и имеющий ограничение на работу в стороне запроса, так что любой другой способ конвертировать его с помощью mysql –

+1

Я думаю, вы могли бы преобразовать встречный пример в строку вместо этого - используя DATE_FORMAT, хотя это ограничило бы использование индексов в этом столбце. В вашем конкретном случае использования это может не быть проблемой. См. Здесь: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format –

+0

эй спасибо, что вы спасете мои выходные .. работают сейчас ... :П –

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') 
Смежные вопросы