我的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
查询的WHERE
子句中的日期之前将它们转换为格式SELECT
。
我尝试使用
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
为了进行比较。
任何帮助将不胜感激。
答案 0 :(得分:41)
由于您的数据已经在varchar中,您必须先将其转换为日期:
select convert(varchar(10), cast(ts as date), 101) from <your table>
答案 1 :(得分:22)
将CONVERT
与[{1}}说明符Value
一起使用,同时将数据转换为101
:
date
答案 2 :(得分: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 演示
答案 3 :(得分:0)
使用:
select convert(nvarchar(10), CREATED_TS, 101)
或
select format(cast(CREATED_TS as date), 'MM/dd/yyyy') -- MySQL 3.23 and above