我想用这样的东西设置多个字段,我怎样才能使它工作?
Select TableId,
CASE
WHEN StartTime > Appt THEN
Field AS Field_1
FieldId AS FieldId_1
WHEN StartTime BETWEEN Appt AND DATE_ADD(Appt, INTERVAL 1 MONTH) THEN
Field AS Field_2
FieldId AS FieldId_2
END
FROM TableA;
Run Code Online (Sandbox Code Playgroud)
它不起作用,AS Field_1附近的语法错误.
您正尝试在SQL语句中执行类似于宏扩展的操作,这是您无法执行的操作.解决问题的最简单方法是在应用程序代码中动态编写SQL,并从应用程序中有条件地执行该语句.
如果必须在SQL中执行此操作,则有几个选项.
每个CASE
都是一个表达式,因此您只能通过CASE
为每列分别生成输出字段:
SELECT ID,
CASE WHEN StartTime > Appt THEN Field_A
WHEN StartTime BETWEEN Appt AND DATE_ADD(Appt, INTERVAL 1 MONTH) THEN
Field_B
END AS field1,
CASE WHEN StartTime > Appt THEN Field_C
WHEN StartTime BETWEEN Appt AND DATE_ADD(Appt, INTERVAL 1 MONTH) THEN
Field_D
END AS field2
FROM TableA;
Run Code Online (Sandbox Code Playgroud)
或者,在存储过程中使用(或可能更简单)的语句形式CASE
IF
,以包含语句的多个版本并有条件地执行它们.
这是完全错误的case
语法。如果您所做的只是更改这些字段的别名,那么请在您的客户端中进行该转换。
例如
SELECT (StartTime > Appt) AS case1,
(StartTime BETWEEN Appt AND Appt + INTERVAL 1 MONTH) AS case2
Field,
FieldID
FROM TableA
if ($row['case1']) then
$field_1 = $row['Field'];
$fieldid_1 = $row['FieldID'];
} else if ($row['case2']) {
etc..
}
Run Code Online (Sandbox Code Playgroud)