Member 11337367 Ответов: 2

Как использовать переменную в предложении where в mysql?


Я хочу взять настроенное значение даты и времени в переменной, а затем использовать его в предложении where в качестве условия.

За то, что я сделал это, используя 2 Выберите заявления и вводить в 2 переменных соответственно.его хранение в том, что успешно для сокращения кода.

когда я использую эти переменные в предложении where(sql-запрос), они не дают выходных данных, и если я жестко закодирую эти выходные значения vaiable, то они придут.


Пожалуйста, помогите мне преодолеть эту проблему.То, как я использовал эту переменную, правильно в where clauese или Как правильно ее использовать

Что я уже пробовал:

select concat(DATE_SUB(CURDATE(), INTERVAL 1 DAY),' ','00:00:00') into @fromdate;
       select concat(DATE_SUB(CURDATE(), INTERVAL 1 DAY),' ','24:59:59') into @todate;


SELECT 
*
	FROM
cust_item_mst gsk
   JOIN
u_stockiest_item gsk_mapping ON gsk_mapping.c_stockiest_code = gsk.c_c2code
   AND gsk_mapping.c_stockiest_item_code = gsk.c_code
   LEFT JOIN
u_stockiest_item AS stk_ucode ON stk_ucode.c_ucode = gsk_mapping.c_ucode
   LEFT JOIN
cust_inv_det dist_inv ON dist_inv.c_c2code = stk_ucode.c_stockiest_code
   AND stk_ucode.c_stockiest_item_code = dist_inv.c_item_code
   JOIN
cust_inv_mst inv_mst ON inv_mst.c_c2code = dist_inv.c_c2code
   AND inv_mst.c_br_code = dist_inv.c_br_code
   AND inv_mst.c_year = dist_inv.c_year
   AND inv_mst.c_prefix = dist_inv.c_prefix
   AND inv_mst.n_srno = dist_inv.n_srno
   LEFT JOIN
cust_act_mst retail_mst ON retail_mst.c_c2code = inv_mst.c_c2code
   AND retail_mst.c_code = inv_mst.c_cust_code
   JOIN
cust_inv_sub_det invrcvd ON invrcvd.c_c2code = inv_mst.c_c2code
   AND invrcvd.c_br_code = inv_mst.c_br_code
   AND invrcvd.c_year = inv_mst.c_year
   AND invrcvd.c_prefix = inv_mst.c_prefix
   AND invrcvd.n_srno = inv_mst.n_srno
   join
gsk_csv_stkdata gsk_stk on gsk_stk.lcc2code=stk_ucode.c_stockiest_code    
WHERE
gsk.c_c2code = '00S204'
   AND gsk_stk.lcc2code = '003004'
   AND invrcvd.d_ldate >= @fromdate
   AND invrcvd.d_ldate <= @todate
order by gsk_stk.lcc2code       

2 Ответов

Рейтинг:
1

Maciej Los

Так и должно быть:

WHERE
gsk.c_c2code = '00S204'
   AND gsk_stk.lcc2code = '003004'
   AND invrcvd.d_ldate >= @fromdate
   AND invrcvd.d_ldate <= @todate

Как видите, я убрал ненужные знаки: '+ +' вокруг переменных.

Для получения более подробной информации, пожалуйста, смотрите: Переменные MySQL[^]

[РЕДАКТИРОВАТЬ]

Цитата:
сначала я попробовал без знака + все равно он не пришел


Итак, попробуйте установить значение переменной по-другому:
SET  @fromdate:='2019-08-30 00:00:00'
--or
SELECT @fromdate:=MAX(dateTimeField)
FROM yourtable;


Member 11337367

сначала я попробовал без знака + все равно он не пришел

Maciej Los

Пожалуйста, смотрите обновленный ответ.

Member 11337367

оба не дают выхода..
ГДЕ
gsk.c_c2code = '00S204'
И gsk_stk.lcc2code = '003004'
И invrcvd.d_ldate >= '2019-08-29 00:00:00'
И invrcvd.d_ldate <= '2019-08-29 24:59:59'
заказ по gsk_stk.lcc2code для этого способа дает свой результат

Maciej Los

Как я уже упоминал, вы должны установить свою переменную таким образом:

SET  @fromdate:='2019-08-29 00:00:00';
SET  @todate:='2019-08-29 23:59:59';

Member 11337367

Мне это только понравилось, но это не эффективно

Maciej Los

Итак, попробуйте бросить:

SET  @fromdate:=CAST('2019-08-29 00:00:00' AS DATETIME);
SET  @todate:=CAST('2019-08-29 23:59:59' AS DATETIME);

Member 11337367

нет пользы означает, что он не работает.я чувствую, что он не проверяет переменную

Maciej Los

???

Рейтинг:
1

OriginalGriff

Посмотрите на свой код:

WHERE
gsk.c_c2code = '00S204'
   AND gsk_stk.lcc2code = '003004'
   AND invrcvd.d_ldate >= '+@fromdate+'
   AND invrcvd.d_ldate <= '+@todate+'
order by gsk_stk.lcc2code
Вы не используете содержимое переменной - вы заключили их в строку, поэтому сравнение производится со строкой.
Попробуй:
WHERE
gsk.c_c2code = '00S204'
   AND gsk_stk.lcc2code = '003004'
   AND invrcvd.d_ldate >= @fromdate
   AND invrcvd.d_ldate <= @todate
order by gsk_stk.lcc2code


Member 11337367

сначала я попробовал без знака + все равно он не пришел потом использовал этот символ