将dd-mm-yyyy转换为mm/dd/yyyy

pet*_*ter 2 sql t-sql sql-server sql-server-2008

我有一个varchar(200)名为的列Submit_Date,我试图将其转换为MM/DD/YYYY格式.当我这样做时,我收到以下错误:

消息242,级别16,状态3,行1
将varchar数据类型转换为日期时间数据类型导致超出范围的值.

该表的样本数据是:

Submit_Date
-----------------------
27-09-2013 16:15:00 CST
30-09-2013 16:30:24 CST
27-09-2013 10:03:46 CST
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法:

Select Convert(datetime,Submit_date,101) from dbo.Tickets
Run Code Online (Sandbox Code Playgroud)

Aar*_*and 9

你在这里承担了大约15个关于日期/时间的主要罪行.首先,快速回答:

DECLARE @x VARCHAR(200);

SELECT @x = '27-09-2013 16:15:00 CST'

SELECT CONVERT(CHAR(10),CONVERT(DATETIME,LEFT(@x,10),105),101);
Run Code Online (Sandbox Code Playgroud)

下一个:

  1. 为什么你要在一varchar(200)列中存储日期/时间数据?大家都知道,任何人都可以插入值一样'09-27-2013''465-32-207floob'在那里,对不对?如果您需要时区信息,可以查看DATETIMEOFFSET数据类型(但请注意,它不支持DST).

  2. 你为什么要存储区域格式dd-mm-yyyy?如果第一个值是07-11-2013我必须猜测你是指7月11日还是11月7日.如果你不打算做正确并使用正确的日期/时间数据类型,为什么要使用字符串格式让人猜?使用明确的格式,例如,你会好得多yyyy-mm-ddThh:mm:ssZ.

  3. 同样,为什么要输出不同的区域格式mm/dd/yyyy?如果输出'05/06/2013'你100%确信你的观众中的每个人都知道你的意思是5月6日而不是6月5日?您的输出也应该是明确的.如果您绝对必须使用某种区域和模糊格式进行格式化,请使用客户端的字符串格式设置功能.例如,C#有.ToString().Format()它们在呈现与字符串格式的T-SQL将永远日期更加强大和高效.