0

是否可以将日期名称输出用作列名

目前我正在使用这个

SELECT *,
LEFT(thu,5) as open1
FROM ...
WHERE ...

但我想用动态当前日期(3 个字母)替换 thu 字符串,并仍将其用作列名。

4

1 回答 1

0

简短的回答是否定的,它不能完成。SQL 语句中的列引用(与所有标识符一样)是静态的。标识符不能替换为在运行时确定的表达式。


更长的答案是,您要么需要动态生成语句,要么根据任何条件从一组可能的语句中选择一个来执行。

第三种方法可能会为您提供所需的内容,方法是引用您要从中选择的所有可能的列名,并根据星期几从该列中返回条件。

像这样的东西达到了同样的结果:

SELECT LEFT(CASE DAYNAME(NOW())
            WHEN 'Sunday'    THEN t.sun
            WHEN 'Monday'    THEN t.mon
            WHEN 'Tuesday'   THEN t.tue
            WHEN 'Wednesday' THEN t.wed
            WHEN 'Thursday'  THEN t.thu
            WHEN 'Friday'    THEN t.fri
            WHEN 'Saturday'  THEN t.sat
            END,5) AS open1
  FROM t

(为了避免基于语言/地区的星期名称的不同设置出现问题,我更喜欢使用该DAYOFWEEK功能。而且我更有可能重复该LEFT功能,即使它被重复,似乎更容易阅读:

SELECT CASE DAYOFWEEK(NOW())
         WHEN 1 THEN LEFT(t.sun,5)
         WHEN 2 THEN LEFT(t.mon,5)
         WHEN 3 THEN LEFT(t.tue,5)
         WHEN 4 THEN LEFT(t.wed,5)
         WHEN 5 THEN LEFT(t.thu,5)
         WHEN 6 THEN LEFT(t.fri,5)
         WHEN 7 THEN LEFT(t.sat,5)
       END AS open1
  FROM t
于 2013-08-15T16:25:33.513 回答