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

时间:2013-10-24 03:37:34

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

我有一个名为varchar(200)的{​​{1}}列,我正在尝试将其转换为MM / DD / YYYY格式。当我这样做时,我收到以下错误:

  

Msg 242,Level 16,State 3,Line 1
将varchar数据类型转换为datetime数据类型导致超出范围的值。

该表的样本数据是:

Submit_Date

我尝试了以下内容:

Submit_Date
-----------------------
27-09-2013 16:15:00 CST
30-09-2013 16:30:24 CST
27-09-2013 10:03:46 CST

1 个答案:

答案 0 :(得分: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);

下一步:

  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的字符串格式呈现日期时更加强大和高效。