0

有没有办法使用 WHERE 或其他方式返回“AS”结果?

我正在对 FONE1 列执行 SUBSTRING 并尝试返回 DDD = 31 但我收到错误代码:1054。“where 子句”中的未知列“DDD”0.000 秒

-->

SELECT  **SUBSTRING(FONE1,1,2) AS DDD**, FONE1, F1STA,LASTCALL
FROM discador_processados
WHERE fila_mailing = 2638
AND F1STA ='ANSWER'
AND CLASSE1 IN ('VC2','VC3')
**AND DDD = 31**
AND LASTCALL BETWEEN '2020-10-02 00:00:00' AND '2020-10-30 23:59:59'

这个想法是得到下面的回报

DDD    FONE1     F1STA      LASTCALL 
31  31999999999 ANSWER  2020-10-02 09:08:13
31  31999999999 ANSWER  2020-10-02 09:09:16
31  31999999999 ANSWER  2020-10-02 09:17:41

谢谢!

4

2 回答 2

1

您不能在WHERE子句中使用输出列别名,因为尚未评估输出列表达式,因此根本不存在。

但是你可以在HAVING子句中这样做:

SELECT SUBSTRING(FONE1,1,2) AS DDD, FONE1, F1STA,LASTCALL
FROM discador_processados
WHERE fila_mailing = 2638
  AND F1STA ='ANSWER'
  AND CLASSE1 IN ('VC2','VC3')
  AND LASTCALL BETWEEN '2020-10-02 00:00:00' AND '2020-10-30 23:59:59'
HAVING DDD = 31

并注意Gordon Linoff的回答——它非常有用。

于 2020-11-12T13:11:33.570 回答
1

我建议写WHERE为:

WHERE fila_mailing = 2638 AND
      F1STA ='ANSWER' AND
      CLASSE1 IN ('VC2', 'VC3') AND
      FONE1 LIKE '31%' AND
      LASTCALL >= '2020-10-02' AND
      LASTCALL < '2020-10-31'

注意逻辑的变化:

  • FONE1似乎是一个字符串,所以比较使用字符串操作。
  • 比较DATETIME使用>=and<而不是BETWEEN最后一天的最后一秒不会错过。
  • 日期格式已简化。
于 2020-11-12T12:36:58.163 回答