【问题标题】:how to remove time from datetime如何从日期时间中删除时间
【发布时间】:2012-12-26 03:13:58
【问题描述】:

数据库中的字段DATE格式如下:

2012-11-12 00:00:00

我想从日期中删除时间并像这样返回日期:

11/12/2012

【问题讨论】:

  • 您使用的是什么数据库? MySQL? SQL 服务器?使用权?甲骨文?
  • 考虑将日期保持为 2012-11-12。这是 ISO 标准格式,比其他格式更有用——即使对于最终用户也是如此——因为您可以按字符串排序并按正确的顺序排列日期。
  • @GordonLinoff,我最喜欢 ISO 格式的属性是,无论是月份还是日期,都不会有任何歧义。如果您的用户分布在不同的国家/地区,这一点非常重要。
  • @MarkRansom 。 . .不幸的是,在 SQL Server 中,只有当您省略破折号时才会出现这种情况。因此,无论服务器上的日期格式设置如何,“20121112”始终为“2012 年 11 月 12 日”。 '2012-11-12' 可能表示 2012 年 12 月 11 日或 2012 年 11 月 12 日,但我仍然更喜欢破折号。这是 Aaron Bertrand 关于这个主题的一个很好的博客。 . . sqlblog.com/blogs/aaron_bertrand/archive/2009/10/16/….
  • @GordonLinoff,世界上真的存在 YYYY-DD-MM(相对于 YYYY/DD/MM)被认为合适的地方吗?如果不是,那将是 SQL Server 中的一个错误。

标签: sql date reporting-services


【解决方案1】:

至少在mysql中,你可以使用DATE(theDate)

【讨论】:

    【解决方案2】:

    只需使用,(在 TSQL 中

    SELECT convert(varchar, columnName, 101)
    

    MySQL

    SELECT DATE_FORMAT(columnName, '%m/%d/%Y')
    

    【讨论】:

    • 谢谢,它适用于日期字段,但不适用于 Char 类型字段。知道我需要在 TSQL 的命令中添加什么吗?谢谢
    • @user1860212,您需要进行双重转换 - char 到 datetime,然后 datetime 到 char。
    【解决方案3】:
    SELECT DATE('2012-11-12 00:00:00');
    

    返回

    2012-11-12
    

    【讨论】:

    • @madth3:实际上,它确实提供了一个答案,只是一个不正确的答案。
    【解决方案4】:

    更多信息请参考:SQL Server Date Formats

    [MM/DD/YYYY]

    SELECT CONVERT(VARCHAR(10), cast(dt_col as date), 101) from tbl
    

    [DD/MM/YYYY]

    SELECT CONVERT(VARCHAR(10), cast(dt_col as date), 103) from tbl
    

    Live Demo

    【讨论】:

    • 谢谢,它适用于日期字段,但不适用于 Char 类型字段。知道我需要在命令中添加什么吗?谢谢
    【解决方案5】:

    您可以尝试以下方法:

    SELECT CONVERT(VARCHAR(10),yourdate,101);
    

    或者这个:

    select cast(floor(cast(urdate as float)) as datetime);
    

    【讨论】:

    • 谢谢,第一个命令适用于日期字段,但不适用于 Char 类型字段。知道我需要在命令中添加什么吗?谢谢
    • @user1860212 然后您必须将 char 类型转换为日期,然后将其删除...您是在 TSQL 中询问吗?请试试这个:(PS:我的连接速度很慢,请耐心等待)cast(convert(char(8),urdate,112) as datetime)
    【解决方案6】:

    使用这条 SQL:

    SELECT DATE_FORMAT(date_column_here,'%d/%m/%Y') FROM table_name;
    

    【讨论】:

      【解决方案7】:

      就我个人而言,我会返回完整的本机日期时间值并在客户端代码中对其进行格式化。

      这样,您可以使用用户的区域设置为该用户赋予正确的含义。

      “11/12”是模棱两可的。是吗:

      • 11 月 12 日
      • 12 月 11 日

      【讨论】:

        【解决方案8】:

        首先,如果您的日期是 varchar 格式,请更改 store dates as dates 它将为您省去很多麻烦,而且最好尽早完成。问题只会变得更糟。

        其次,一旦有了日期不要将日期转换为 varchar!将其保留为日期格式,并在应用程序端使用格式来获​​取所需的日期格式。

        根据您的 DBMS,有多种方法可以做到这一点:


        SQL-Server 2008 及更高版本:

        SELECT  CAST(CURRENT_TIMESTAMP AS DATE)
        

        SQL-Server 2005 及更早版本

        SELECT  DATEADD(DAY, DATEDIFF(DAY, 0, CURRENT_TIMESTAMP), 0)
        

        SQLite

        SELECT  DATE(NOW())
        

        甲骨文

        SELECT  TRUNC(CURRENT_TIMESTAMP)
        

        Postgresql

        SELECT  CURRENT_TIMESTAMP::DATE
        

        如果您需要在报告中使用特定于文化的格式,您可以明确说明接收文本框的格式(例如 dd/MM/yyyy),或者您可以设置语言以显示相关日期格式那种语言。

        无论哪种方式,这在 SQL 之外处理得更好,因为在 SQL 中转换为 varchar 会影响您在报告中可能执行的任何排序。

        如果您不能/不会将数据类型更改为 DATETIME,则仍将其转换为 SQL 中的日期(例如 CONVERT(DATETIME, yourField)),然后再发送到报告服务并按上述方式处理。

        【讨论】:

          【解决方案9】:

          我发现这个方法非常有用。但是,它将您的日期/时间格式转换为日期,但它为我需要的工作所做的工作永远不会少。 (我只需要在报告上显示日期,时间无关紧要)。

          CAST(start_date AS DATE)
          

          更新

          (记住我是实习生;))

          如果您使用 SSRS,我想出了一个更简单的方法。

          实际更改报表中字段所在的文本框属性更容易。右键单击字段>数字>日期并选择适当的格式!

          【讨论】:

            【解决方案10】:

            TSQL

            SELECT CONVERT(DATE, GETDATE())         // 2019-09-19
            SELECT CAST(GETDATE() AS DATE)          // 2019-09-19
            SELECT CONVERT(VARCHAR, GETDATE(), 23)  // 2019-09-19
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2012-11-23
              • 2020-01-23
              • 2019-07-05
              • 1970-01-01
              • 2017-09-09
              • 1970-01-01
              • 1970-01-01
              • 2014-12-27
              相关资源
              最近更新 更多