我有DOB varchar
列,其中包含日期值。我以mm/dd//yyyy
格式获取日期。
我必须在DOB列中将所有这些值的格式更改为yyyymmdd
格式。根据客户的要求,我不能将datetime
数据类型用于DOB列。
请建议可以做些什么。
答案 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)