Datetime 帮助在SQL中将Varchar mmddyyyy转换为mm/dd/yyyy

Datetime 帮助在SQL中将Varchar mmddyyyy转换为mm/dd/yyyy,datetime,sql-server-2012,Datetime,Sql Server 2012,我正在与一位客户合作,该客户的字段是varchar,他们使用它输入日期。我知道这是个坏习惯,但这是我必须面对的。无论如何,我希望他们总是输入mmddyyyy,即“03152016”,但他们可能会输入“31516”。有没有办法将其转换为mm/dd/yyyy 我试过石膏。我试过了。我试过临时桌。似乎我注定要得到某种转换错误的一个超出范围的值或失败。以下是我尝试过的一些项目的示例。关于如何让它工作的任何提示 SELECT CONVERT(varchar(10), [TheirField], 101)

我正在与一位客户合作,该客户的字段是varchar,他们使用它输入日期。我知道这是个坏习惯,但这是我必须面对的。无论如何,我希望他们总是输入mmddyyyy,即“03152016”,但他们可能会输入“31516”。有没有办法将其转换为mm/dd/yyyy

我试过石膏。我试过了。我试过临时桌。似乎我注定要得到某种转换错误的一个超出范围的值或失败。以下是我尝试过的一些项目的示例。关于如何让它工作的任何提示

 SELECT CONVERT(varchar(10), [TheirField], 101) FROM Table
 OR
 CREATE TABLE #temp
 (FormattedDate datetime)
 Insert into #temp
 SELECT [TheirField] FROM Table
 OR
 SELECT CONVERT(varchar(10),CAST([TheirField] as datetime),101) FROM Table

我想说的是,首先,让我们用零(0)填充正面,以确保我们有一个完整的6,8字符长度值。不管它是否在存储的数据中,在处理它之前考虑一个最终的数据验证步骤。 这有两种方法。我会走很长的路,这样你就能看到颗粒的台阶了。总会有更好的方法给猫剥皮,但是知道这些递增的步骤将有助于为您提供需要执行的必要步骤

  • 将6个字符的长度升级为8个字符的长度(建议这样做,因为它会创建一个标准格式长度来处理)
  • 分别处理它们,6和8长度。上述步骤的变化如图所示

您想如何将
11116
翻译为
01-11-2016
11-01-2016
declare @val varchar(15) = '11116'
declare @yr varchar(4), @mn varchar(2), @day varchar(2)

-- First check to see if SQL recognizes the format; not full-proof just a guage ;)
select ISDATE(@val)

-- Pad the month with a preceeding zero (0)
select @val = right('0' + @val, 6)

select @val 

-- Extract the date components
select @yr = '20' + right(@val, 2)
  , @mn = left(@val, 2)
  , @day = SUBSTRING(@val, 3, 2)

select @yr, @mn, @day 

-- Reconstitute the date in your preferred format
select @mn + '/' + @day + '/' + @yr