Mysql 如果列为空,请检查其他列
我有下表,其中订单日期和交货日期为'varchar'类型Mysql 如果列为空,请检查其他列,mysql,sql,Mysql,Sql,我有下表,其中订单日期和交货日期为'varchar'类型 id name order_date delivery_date --------------------------------------------------------- 1 A 04/01/2017 04/08/2017 2 B 04/01/2017 NULL 3 C 04/02
id name order_date delivery_date
---------------------------------------------------------
1 A 04/01/2017 04/08/2017
2 B 04/01/2017 NULL
3 C 04/02/2017 04/03/2017
4 D 04/04/2017 04/05/2017
5 E 04/05/2017 04/11/2017
6 F 04/11/2017 NULL
7 G 04/15/2017 04/17/2017
8 H 04/18/2017 NULL
我需要所有的记录
* delivery_date between 04/01/2017 TO 04/15/2017
* if delivery_date IS NULL then check order_date between 04/01/2017 TO 04/15/2017
(in this case order_date is assumed as delivery_date)
我正在尝试以下代码:
SELECT *,
IF(delivery_date IS NOT NULL, `delivery_date`, `order_date`) as `final_date`
FROM `test`
WHERE STR_TO_DATE(`final_date` ,'%m/%d/%Y') BETWEEN STR_TO_DATE('04/01/2017','%m/%d/%Y') AND STR_TO_DATE('04/15/2017','%m/%d/%Y')
但他给出了这个错误:
Unknown column 'final_date' in 'where clause'
您试图在其中使用列别名,这是不允许的。您必须使用下面的整个表达式
IF(delivery_date IS NOT NULL, `delivery_date`, `order_date`)
您的WHERE子句应该如下所示
WHERE STR_TO_DATE(COALESCE(`delivery_date`, `order_date`) ,'%m/%d/%Y') BETWEEN STR_TO_DATE('04/01/2017','%m/%d/%Y')
AND STR_TO_DATE('04/15/2017','%m/%d/%Y')
您试图在其中使用列别名,这是不允许的。您必须使用下面的整个表达式
IF(delivery_date IS NOT NULL, `delivery_date`, `order_date`)
您的WHERE子句应该如下所示
WHERE STR_TO_DATE(COALESCE(`delivery_date`, `order_date`) ,'%m/%d/%Y') BETWEEN STR_TO_DATE('04/01/2017','%m/%d/%Y')
AND STR_TO_DATE('04/15/2017','%m/%d/%Y')
尝试上面的代码。希望这会有所帮助
尝试上面的代码。希望这会有所帮助。我已经在@Rahul和@Sagar Gangwal提供的示例的帮助下找到了查询。查询是:
SELECT * FROM `test`
WHERE
STR_TO_DATE( COALESCE(NULLIF(`delivery_date`,''),`order_date`) ,'%m/%d/%Y')
BETWEEN STR_TO_DATE('04/01/2017','%m/%d/%Y') AND STR_TO_DATE('04/15/2017','%m/%d/%Y') ";
我在@Rahul和@Sagar Gangwal提供的示例的帮助下解决了这个查询。查询是:
SELECT * FROM `test`
WHERE
STR_TO_DATE( COALESCE(NULLIF(`delivery_date`,''),`order_date`) ,'%m/%d/%Y')
BETWEEN STR_TO_DATE('04/01/2017','%m/%d/%Y') AND STR_TO_DATE('04/15/2017','%m/%d/%Y') ";
1:使用COALESCEdelivery\u date、order\u date代替标准SQL。2:在WHERE中重复计算,因为您不能在此处使用别名简单规则您不能在WHERE子句中使用别名。1:改为使用联合交货日期、订单日期,这是标准SQL。2:重复WHERE中的计算,因为此处不能使用别名。简单规则是,WHERE子句中不能使用别名。谢谢@Rahul。现在我正在尝试这段代码:从STR_TO_datecoalised_date,admission_date,在STR_TO_date'04/01/2017'、'%m/%d/%Y'和STR_TO_date'04/15/2017'、'%m/%d/%Y'之间选择*,我得到以下结果:1,3,4,5,但我希望是1,2,3,4,5,6谢谢@Rahul。现在我正在尝试这段代码:选择*从STR_TO_datecoalised_date,admission_date,'%m/%d/%Y',STR_TO_date'04/01/2017','%m/%d/%Y'和STR_TO_date'04/15/2017','%m/%d/%Y',我得到以下结果:1,3,4,5,但我期望1,2,3,4,5,6