【问题标题】:How do i match a date format into yyyymmdd in SQL如何在 SQL 中将日期格式匹配到 yyyymmdd
【发布时间】:2018-08-30 08:04:08
【问题描述】:

我正在研究 SAS 上的 SQL,我想使用“%let”作为日期时间。 我表中日期时间的格式是

销售日期

2018 年 8 月 28 日

2018 年 8 月 29 日

但我正在使用

%let start_date=20180828;

%let end_date=20180830;

WHERE put(sale_date, yymmddn8.) 在“&start_date”之间。和“&end_date。”

我收到错误“数据类型“sale_date”与定义的类型名称不匹配。” 我该如何解决这个问题?

谢谢

【问题讨论】:

    标签: sql sas type-conversion


    【解决方案1】:

    如果你有使用日期,你需要使用你必须使用的日期文字,如下所示

    proc sql;
     select * from sashelp.buy
     where date between "01JAN1997"D and "30JAN2007"D ;
    

    宏变量由 & 而不是 % 引用。要使您的代码正常工作,您需要按如下方式进行更改

    %let start_date="01JAN1997"D ;
    %let end_date="30JAN2007"D;
    proc sql;
     select * from sashelp.buy
    where date between &start_date and &end_date ;
    

    【讨论】:

      【解决方案2】:

      您需要为您的错误消息显示更多上下文,因为它看起来不像您从该代码中得到的错误类型。

      您发布的WHERE 语句应该可以工作,因为您将SALE_DATE 转换为yyyymmdd 形式的字符串并将其与其他字符串进行比较。请注意,如果您的变量 SALE_DATE 在 ddMONyyyy 中显示值,那么它可能具有 DATE 值(天数)而不是 DATETIME 值(秒数)。以这种方式显示 DATETIME 值的唯一方法是,如果您的变量附加了 DTDATE9. 格式。另一种可能是SALE_DATE实际上是一个字符变量,而不是任何类型的数值。

      如果SALE_DATE 确实是日期时间值,那么您需要使用DATEPART() 函数将其转换为日期值以应用 YYMMDDN8。格式化。

      WHERE put(datepart(sale_date), yymmddn8.) between "&start_date." and "&end_date."
      

      要输入日期文字,您需要一个带引号的字符串,后跟字母d。这些值需要采用DATE 信息可以读取的格式。所以像"28AUG2018"d。然后你可以将它们与变量进行比较,而不必先转换它。

      %let start_date=28AUG2018;
      %let end_date=30AUG2018;
      WHERE sale_date between "&start_date."d and "&end_date."d
      

      或者,如果变量确实是 DATETIME,则改用日期时间文字。

      WHERE sale_date between "&start_date:00:00"dt and "&end_date:23:59"dt
      

      【讨论】:

        猜你喜欢
        • 2017-05-12
        • 1970-01-01
        • 2023-04-05
        • 1970-01-01
        • 1970-01-01
        • 2020-10-04
        • 2021-01-16
        • 1970-01-01
        • 2020-11-25
        相关资源
        最近更新 更多