Sql server T SQL如何将Varchar转换为日期

Sql server T SQL如何将Varchar转换为日期,sql-server,date,datetime,casting,type-conversion,Sql Server,Date,Datetime,Casting,Type Conversion,我正在使用MS SQL Server 2016 我在表“MyTable”中有一个字段“MyDate”。它包含格式为dd/mm/yyyy的varchar(10)中的日期,例如2020年1月21日 如何将这些转换为SQL日期时间格式 我试过: select CONVERT(varchar(10), CAST(MyDate as date), 103) as 'dd/mm/yyyy' from MyTable 及 但是收到错误: Conversion failed when converting d

我正在使用MS SQL Server 2016

我在表“MyTable”中有一个字段“MyDate”。它包含格式为dd/mm/yyyy的varchar(10)中的日期,例如2020年1月21日

如何将这些转换为SQL日期时间格式

我试过:

select CONVERT(varchar(10), CAST(MyDate as date), 103) as 'dd/mm/yyyy' from MyTable

但是收到错误:

Conversion failed when converting date and/or time from character string.

我遗漏了什么?

您需要将其转换为日期时间。 请尝试下面的查询

   select CONVERT(datetime, '21/01/2020', 103) as 'dd/mm/yyyy'

您可以使用以下任一查询

Select CONVERT(date, '21/01/2020', 103)
SELECT Cast(convert(varchar, convert(date, '21/01/2020', 105), 101) as date)
SELECT cast(CONVERT(CHAR(10),CONVERT(DATETIME,LEFT('21/01/2020',10),105),101) as date);
示例输出如图所示


您可以找到。

第一个
CONVERT
参数是转换后的数据类型,因此您希望
CONVERT(date,MyDate,103)
@DanGuzman您是对的,它会解决问题。@DanGuzman但现在我只得到YYYY-MM-DD中的日期?日期和时间数据类型没有格式,@Michael,它们存储为二进制值。由您的演示层定义显示的格式。
我在表“MyTable”中有一个字段“MyDate”。它在varchar(10)中包含日期
,这是一个严重的错误。日期没有格式。使用正确的类型,例如
date
datetime2
,让客户决定如何显示它们。您根本无法从字符串中恢复正确的日期-如果其他错误代码混淆了字符串格式怎么办?如果同一字段包含
13/04/2020
04/13/2020
,该怎么办。更糟糕的是,如果是2020年7月4日,那是4月7日还是7月4日呢?修复数据类型
Select CONVERT(date, '21/01/2020', 103)
SELECT Cast(convert(varchar, convert(date, '21/01/2020', 105), 101) as date)
SELECT cast(CONVERT(CHAR(10),CONVERT(DATETIME,LEFT('21/01/2020',10),105),101) as date);