代码之家  ›  专栏  ›  技术社区  ›  weismat

Informix SQL:如何获取查询中datetime字段的日期部分?

  •  6
  • weismat  · 技术社区  · 14 年前

    在查询中只使用datetime字段的date部分的最佳方法是什么?
    我有一个datetime字段,希望按日期对其进行分组/计数。

    4 回复  |  直到 8 年前
        1
  •  18
  •   Jonathan Leffler Toon Krijthe    14 年前

    有很多方法可以做到这一点:

    EXTEND(dt_field, YEAR TO DAY)
    CAST(dt_field AS DATETIME YEAR TO DAY)
    dt_field::DATETIME YEAR TO DAY
    CAST(dt_field AS DATE)
    dt_field::DATE
    DATE(dt_field)
    

    最简单的-就像最短的-是最后两个,函数符号可能是最清晰的。前三个留给你一个日期时间值;后三个留给你一个日期值。这些是相似的,但不完全相同。不过,它们可以自由地互换。

        2
  •  5
  •   AndreKR    14 年前
    date(name_of_field)
    
        3
  •  3
  •   Kayathiri    8 年前

    这个

    to_char(dt_field, "%d %B %Y")
    

    给予 31 May 2016 .

    分组:

    SELECT YEAR(dt_field) year, MONTH(dt_field) month, COUNT(*) count
    FROM tblName
    GROUP BY 1, 2
    ORDER BY 1, 2;
    
        4
  •  1
  •   Paul Navin Israni    6 年前

    只是为了增加。。。

    我在Informix中寻找提取部分日期和时间的方法,发现了这些,以防对任何人都有用,它们都在一个地方。

    作为文本。。。

    • TO_CHAR(<value>, "%H") 小时(00-23)
    • TO_CHAR(<value>, "%M") 分钟(00-59)
    • TO_CHAR(<value>, "%S") 秒(00-61)

    Further TO_CHAR codes...

    • %a 在区域设置中定义的工作日缩写名称
    • %b 缩写的月份名称,在区域设置中定义
    • %C 作为整数(00到99)的世纪数(年份除以100并截断为整数)
    • %D 与%m/%d/%y格式相同
    • %e 作为数字(1到31)的一个月的第几天。一个数字的值前面有一个空格。
    • %Fn 一秒的小数的值,精度由无符号整数n指定。n的默认值是2;n的范围是0?n?5。此值覆盖在%和F字符之间指定的任何宽度或精度。
    • %h 与%b格式相同:缩写的月份名称,在区域设置中定义
    • %H 小时为2位整数(00到23)(24小时制)
    • %I 小时为2位整数(00到11)(12小时制)
    • %m 月份为整数(01到12)。任何一位数字的前面都有一个零(0)。
    • %M 分钟为2位整数(00到59)
    • %S 第二个是2位整数(00到61)。第二个值可以高达61(而不是59),以允许偶尔出现闰秒和双闰秒。
    • %T 时间格式为%H:%M:%S
    • %w 工作日是一个数字(0到6);0表示相当于星期日的区域设置。
    • %y 以2位十进制数字表示的年份。

    作为整数。。。

    • DAY(<value>) 月日(最多0个月)
    • MONTH(<value>) 一年中的月份(1-12)
    • YEAR(<value>) 年份编号