【问题标题】:Teradata SQL - change timestamp to dateTeradata SQL - 将时间戳更改为日期
【发布时间】:2017-06-04 05:12:32
【问题描述】:

我有一个包含两列的表格:

Column1: Email_address[VARCHAR(255), UNICODE]
Column2: newsletter_subscription_date [TIMESTAMP (0)] e.g. DD.MM.YYYY HH:MM:SS

目标:我想编写一个查询,告诉我在特定时间范围内每天进行了多少订阅。

问题:我不知道如何将时间范围转换为日期格式 YYYY/MM/DD

到目前为止我的查询:

SELECT  CAST(newsletter_subscription_date AS DATE FORMAT 'YYYY/MM/DD'), COUNT(*)
FROM emailtable WHERE newsletter_subscription_date >= DATE - 30
GROUP BY newsletter_subscription_date
ORDER BY newsletter_subscription_date DESC

但我得到的只是这样的:

 newsletter_subscription_date   Count(*)
1   18.01.2017  1
2   18.01.2017  1
3   18.01.2017  1
4   18.01.2017  1
5   18.01.2017  1
6   18.01.2017  1
7   18.01.2017  1
8   18.01.2017  1
9   18.01.2017  1
10  18.01.2017  1
11  18.01.2017  1

如何将时间戳转换为正确的日期?

【问题讨论】:

  • 它已经是 CAST 之后的正确日期,但是您的客户端(SQL 助手?)使用基于 Windows 设置的本地规则对其进行格式化。在 SQL 助手中,您可以在 *Tools > Options > Data Format > Display dates in this format"中更改格式。
  • 很遗憾,不会改变结果。
  • 哦,现在我明白了,您按原始时间戳列分组。您需要GROUP BY CAST(newsletter_subscription_date AS DATE)GROUP BY 1

标签: sql-server teradata


【解决方案1】:

您可以在显示之前将日期转换为您喜欢的字符和格式

sel to_char(CAST(newsletter_subscription_date AS date),  'YYYY/MM/DD'),  COUNT(*)
FROM emailtable WHERE newsletter_subscription_date >= DATE - 30
GROUP BY newsletter_subscription_date
ORDER BY newsletter_subscription_date DESC

【讨论】:

  • 不幸的是它并没有改变结果:(它仍然多次列出相同的日期。
【解决方案2】:

尝试为您的重铸专栏指定一个新名称并以此进行分组:

SELECT  CAST(newsletter_subscription_date AS DATE FORMAT 'YYYY/MM/DD') as sub_date, 
        COUNT(*) as num_subscriptions
FROM    emailtable 
WHERE   newsletter_subscription_date >= DATE - 30
GROUP BY sub_date
ORDER BY sub_date DESC

【讨论】:

    猜你喜欢
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-12
    相关资源
    最近更新 更多