【问题标题】:Building a Case Statement with TIME使用 TIME 构建案例陈述
【发布时间】:2018-03-20 05:16:24
【问题描述】:

这是我的代码示例。

PROC SQL;

CREATE TABLE SUCCESS_TIME_INTERVALS AS

SELECT

A.*,

CASE 

WHEN A.TIME BETWEEN  9:00:00 AND 11:00:00 THEN '9AM_11AM'

WHEN A.TIME BETWEEN 11:00:00 AND 13:00:00 THEN '11AM_1PM'

ELSE 'OTHER' END AS TIME_INTERVALS

FROM TABLE1 A

;QUIT; 

运行代码时出现此错误

错误 22-322:语法错误,应为以下之一:!!、*、**、 +、-、/、与、||。

ERROR 76-322:语法错误,语句将被忽略。

不知道如何解决这个问题。

非常感谢

【问题讨论】:

  • 可以单独运行 SELECT 吗?
  • 取决于变量 TIME 中的内容。如果它是一个带有时间值的数值变量(即使用TIME. 格式显示时看起来正确),那么请确保在查询中使用时间文字。 '9:00:00't

标签: sql time sas


【解决方案1】:

时间常数需要单引号:

PROC SQL;
CREATE TABLE SUCCESS_TIME_INTERVALS AS
    SELECT A.*,
           (CASE WHEN A.TIME BETWEEN '09:00:00' AND '11:00:00' THEN '9AM_11AM'
                 WHEN A.TIME BETWEEN '11:00:00' AND '13:00:00' THEN '11AM_1PM'
                 ELSE 'OTHER'
            END) AS TIME_INTERVALS
    FROM TABLE1 A;
QUIT; 

很明显,如果time不是字符串,那么就需要适当地表达常量:

PROC SQL;
CREATE TABLE SUCCESS_TIME_INTERVALS AS
    SELECT A.*,
           (CASE WHEN A.TIME BETWEEN '09:00:00't AND '11:00:00't THEN '9AM_11AM'
                 WHEN A.TIME BETWEEN '11:00:00't AND '13:00:00't THEN '11AM_1PM'
                 ELSE 'OTHER'
            END) AS TIME_INTERVALS
    FROM TABLE1 A;
QUIT; 

【讨论】:

  • 时间常数 != 字符串。单/双引号无关紧要,但它们应该是实际的时间常数而不是字符串(假设它实际上是时间字段而不是字符串;并假设它是 SAS 数据集而不是 SQL 服务器表。)
  • @乔。 . .我没有理由认为名为@9​​87654324@ 的列*不是字符串。它可能是一个字符串;我认为问题在这一点上并不明确。
  • 好吧,那么也许先在 cmets 中要求澄清?无论如何,感谢您的更新。我可能仍然会删除“单”这个词,因为在 SAS 中,单引号或双引号在这两种情况下都同样有效,但这是挑剔的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 2010-10-30
  • 2016-05-13
  • 2016-02-21
  • 1970-01-01
相关资源
最近更新 更多