需要在Varchar列中更改日期格式

时间:2014-01-21 17:06:59

标签: sql-server sql-server-2008

我有DOB varchar列,其中包含日期值。我以mm/dd//yyyy格式获取日期。 我必须在DOB列中将所有这些值的格式更改为yyyymmdd格式。根据客户的要求,我不能将datetime数据类型用于DOB列。

请建议可以做些什么。

3 个答案:

答案 0 :(得分:4)

UPDATE dbo.tablename
  SET DOB = CONVERT(CHAR(8), CONVERT(DATETIME, DOB, 101), 112);

当然,无法保证现在所有数据都是有效的m / d / y数据。有人可能输入了d / m / y,或者完全不是日期的东西。

您可以通过修复从此查询返回的任何行来结束:

SELECT DOB FROM dbo.tablename WHERE ISDATE(DOB) = 0;

当然,这不会识别有人输入09/05/2013的任何行,而是指5月9日,而不是9月5日。

这也不会阻止输入未来的字符串,这些字符串不是有效日期(或者不是输入用户期望它们代表的日期)。

强烈考虑让您的客户阅读这些帖子。出于某种原因,我们有与日期相关的数据类型。

答案 1 :(得分:0)

你应该能够......

SELECT CAST( YEAR(DOB_Column) AS VARCHAR(4)) +  
       CAST( LPAD(MONTH(DOB_Column),2,0) AS VARCHAR(2)) + 
       CAST( LPAD(DAY(DOB_Column),2,0) AS VARCHAR(2)) AS MyDate 
FROM MyTable

答案 2 :(得分:0)

我原来的回答是

SELECT CONVERT(VARCHAR, CONVERT(DATETIME,'12/01/2012'), 112)

但我打字太慢了。所以另一种选择是,但这不是一个强大的解决方案,因为它依赖于格式化是相同的。

 DECLARE @MyDate VARCHAR(12) = '12/25/2012';
 SELECT SUBSTRING(@MyDate, 7, 4) + SUBSTRING(@MyDate, 4, 2) + SUBSTRING(@MyDate, 0, 3)