如何将日期转换为格式`mm/dd/yyyy`?

32
我有一个名为CREATED_TS的日期列的SQL表格,其中保存有不同格式的日期,例如下面所示。

我有一个名为CREATED_TS的日期列的SQL表格,其中保存有不同格式的日期,例如下面所示。

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以便进行比较。

非常感谢您的帮助。


4
你的问题是因为你将日期存储为varchars!没有任何好的理由这样做。应该将日期存储为日期类型!请阅读此文章:https://sqlblog.org/2009/10/12/bad-habits-to-kick-choosing-the-wrong-data-type - GarethD
@GarethD 他应该将它们存储为日期时间。 - Mohammad Anini
1
很惊讶没有人链接日期和时间样式文档表 https://learn.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql?view=sql-server-2017#date-and-time-styles - undrline - Reinstate Monica
5个回答

55

由于您的数据已经是varchar格式,因此您需要先将其转换为日期格式:

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

9
关于先转换为日期的做法是正确的,但 111 是代表 yyyy/mm/dd,而提问者已经使用了正确的格式(101)。 - GarethD
使用您的建议获得了所需的输出,但是我还需要将要比较的日期转换为这种格式。 - RobertKing
转换(varchar(10), <你的日期>, 111)。但是,老实说,考虑将日期存储和比较为日期值是值得的。 - Roman Pekar
1
@GarethD 哇,四年后我找到了你的评论。感谢指出,已更新。 - Roman Pekar

28

使用CONVERT函数,将数据转换为date类型,并指定Value参数值为101

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

1
从强大的Dazefs那里学到了很多 ;) - Mathew Thompson
111 是用于 yyyy/mm/dd 的日期格式,OP 使用了正确的样式(101),问题在于列已经是 varchar 类型而不是日期类型,因此样式无法应用。 - GarethD

5
你是否在寻找类似这样的东西?
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

输出:

| CREATED_TS |
|------------|
| 02/20/2012 |
| 11/29/2012 |
| 02/20/2012 |
| 11/29/2012 |
| 02/20/2012 |
| 11/29/2012 |
| 11/16/2011 |
| 02/20/2012 |
| 11/29/2012 |

这里是SQLFiddle演示


2

使用:

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

或者

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

0

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

首先要了解的是,格式化任何列仅适用于向用户展示输出,并不会对数据存储方式产生影响。这意味着数据将以其原始格式存储在服务器上,但在显示输出时,您可以控制其显示方式。

要将列转换为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://istack.dev59.com/zCJFc.webp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接