【问题标题】:query to return specific date from teradata timestamp(6)查询以从 teradata 时间戳返回特定日期(6)
【发布时间】:2013-10-31 15:56:27
【问题描述】:

如何从 teradata timestamp(6) 字段中搜索特定日期,例如:“2013-10-22”?

sel * from table A
where date = '2013-10-22';

我尝试了上面抛出错误的查询。请帮忙!

【问题讨论】:

    标签: sql teradata


    【解决方案1】:

    类似这样的:

    where YourTimestampField >= {d '2013-10-22'}
    and YourTimestampField < {d '2013-10-23'}
    

    【讨论】:

    • 如果我想根据时间戳列分组,只写日期。例如:当我按创建日期执行分组时,它会分别给出所有记录,因为每个值中的时间不同。我想将所有相似的日期组合在一起,而不考虑时间戳字段中的时间
    【解决方案2】:

    你可以这样尝试:-

    sel * from table A
    where date = date '2013-10-22';
    

    由于ANSI标准格式(必须以关键字DATE开头)

    查看this

    【讨论】:

    • @RRR:- 不客气。如果对您有帮助,请接受此作为答案!
    • 我还能知道如何仅使用时间戳中的日期进行分组吗?
    • @RRR:- 没明白你在问什么?你能再问一个问题吗!
    • 如果我想根据时间戳列分组,只写日期。例如:当我按创建日期执行分组时,它会分别给出所有记录,因为每个值中的时间不同。我想将所有相似的日期组合在一起,而不考虑时间戳字段中的时间
    • @RRR:- 我不认为这是可能的,但是你可以在你的日期列上分组!
    【解决方案3】:

    更正式地说:

    select * 
    from table A
    where cast(timestamp_column as date) = date '2013-10-22';
    

    我猜你只是在展示一个例子,因为我认为你不能有一个名为 date 的列;这是一个保留字。上面的关键字“date”是指定 ANSI 日期常量的方式,与“date”函数无关。

    【讨论】:

    • 出乎意料的是:您甚至不必进行 CAST。当将时间戳与日期进行比较时,它会自动转换为日期。我不知道这是否基于标准 SQL,但是当我调查一个假定的错误时,我发现手册中对此进行了定义。
    • 像这样在 where 子句中使用函数往往会减慢生产速度。如果您将函数应用于索引字段,则会被放大。
    • @dnoeth 是的,我有点记得,但我讨厌编写使用默认转换的代码。与我总是在日期字符串前面使用 date 修饰符的原因相同。它不是真的需要,但它让我更清楚发生了什么。
    • 如果我想根据时间戳列分组,只写日期。例如:当我按创建日期执行分组时,它会分别给出所有记录,因为每个值中的时间不同。我想将所有相似的日期组合在一起,而不考虑时间戳字段中的时间
    • @RRR 我认为您的“分组依据”值得一个单独的问题。询问另一个人,并确保展示您想要的示例。说“根据时间戳分组”没有多大意义。
    猜你喜欢
    • 1970-01-01
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    • 2021-07-24
    • 1970-01-01
    • 2014-03-28
    • 1970-01-01
    相关资源
    最近更新 更多