【问题标题】:how to convert date to a format `mm/dd/yyyy`如何将日期转换为格式`mm/dd/yyyy`
【发布时间】:2013-09-02 08:10:35
【问题描述】:

我有一个sql table,其日期列名为CREATED_TS,它以不同的格式保存日期,例如。如下图

Feb 20 2012 12:00AM
11/29/12  8:20:53 PM          
Feb 20 2012 12:00AM
11/29/12  8:20:53 PM          
Feb 20 2012 12:00AM
11/29/12  8:20:53 PM          
Nov 16 2011 12:00AM
Feb 20 2012 12:00AM
11/29/12  8:20:52 PM

现在我想将这些转换为格式mm\dd\yyyy,因为我正在比较我的SELECT 查询的WHERE 子句中的日期。

我尝试过使用

CONVERT(VARCHAR(10),CREATED_TS,101)

但得到的结果是,

Feb 20 201
11/29/12  
Feb 20 201
11/29/12  
Feb 20 201
11/29/12  
Nov 16 201
Feb 20 201
11/29/12  

我需要结果,例如。 02/20/2012 以便比较。

我们将不胜感激。

【问题讨论】:

标签: sql sql-server sql-server-2008 tsql


【解决方案1】:

由于您的数据已经在 varchar 中,您必须先将其转换为日期:

select convert(varchar(10), cast(ts as date), 101) from <your table>

【讨论】:

  • 这对于首先转换为日期是正确的,但111 是用于yyyy/mm/dd,OP 已经具有正确的样式(101)。
  • 使用您的建议获得了所需的输出,但还需要将我想比较的日期转换为这种格式..
  • convert(varchar(10), , 111)。但是,老实说,值得考虑将日期存储和比较为日期
  • @GarethD 哇,四年后我找到了你的评论。感谢指出,已更新
【解决方案2】:

使用CONVERTValue 说明符101,同时将您的数据转换为date

CONVERT(VARCHAR(10), CAST(Created_TS AS DATE), 101)

【讨论】:

  • @DarrenDavies 向强大的 Dazefs 学习 ;)
  • 111 用于yyyy/mm/dd,OP 具有正确的样式 (101) 问题是该列已经是 varchar 而不是日期,因此没有应用样式。
【解决方案3】:

你在寻找这样的东西吗?

SELECT CASE WHEN LEFT(created_ts, 1) LIKE '[0-9]' 
            THEN CONVERT(VARCHAR(10), CONVERT(datetime, created_ts,   1), 101)
            ELSE CONVERT(VARCHAR(10), CONVERT(datetime, created_ts, 109), 101)
      END created_ts
  FROM table1

输出:

|创建_TS | |------------| | 2012 年 2 月 20 日 | | 2012 年 11 月 29 日 | | 2012 年 2 月 20 日 | | 2012 年 11 月 29 日 | | 2012 年 2 月 20 日 | | 2012 年 11 月 29 日 | | 2011 年 11 月 16 日 | | 2012 年 2 月 20 日 | | 2012 年 11 月 29 日 |

这里是SQLFiddle演示

【讨论】:

    【解决方案4】:

    用途:

    select convert(nvarchar(10), CREATED_TS, 101)
    

    select format(cast(CREATED_TS as date), 'MM/dd/yyyy') -- MySQL 3.23 and above
    

    【讨论】:

      【解决方案5】:

      SQL Server 中的日期默认为 YYYY-MM-DD 格式。如果您想将 SQL Server 中的任何列转换为出生日期或发货日期、制造日期等...为 dd/mm/yyy 格式,您可以使用以下方法。

      首先要了解,格式化任何列仅适用于向用户描述输出,并且对数据的存储方式没有任何价值。这意味着数据将以原始格式存储在服务器中,但是当显示输出时,您可以控制它的显示方式。

      要将列转换为 dd/mm/yyyy 格式,您可以使用以下命令:

      假设有一个名为 Employee_Details 的表,如下所示:

           ID     Dept  Salary   DOB
      1   Akash   HR  30000   1989-02-25
      2   Milind  Finance 45000   1975-12-15
      3   Ananya  Admin   25000   1988-08-13
      4   Girish  Finance 58000   1989-05-19
      5   Ujwala  HR  28000   1997-04-26
      6   Mahesh  Sales   60000   1982-11-15
      7   Supriya Marketimg   80000   1979-09-30
      8   Nidhi   Admin   25789   1980-03-02
      9   Jai Sales   70000   1999-07-06
      10  Aditya  Sales   56000   1980-02-28
      

      我将隐藏 DOB 列,以 dd/mm/yyyy 格式在别名列中显示结果

      Select ID,Name,Department,Salary,Convert(nvarchar,DOB,103) as DateofBirth from EMPLOYEE_DETAILS
      `````````````````````````````````````````````````````[enter image description here][1]
      
      Hope this will help
      
      
        [1]: https://i.stack.imgur.com/zCJFc.jpg
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-06-24
        • 1970-01-01
        • 1970-01-01
        • 2023-03-15
        • 1970-01-01
        • 1970-01-01
        • 2012-12-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多