帮助在SQL

时间:2016-03-15 13:26:02

标签: datetime sql-server-2012

我与一个拥有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

1 个答案:

答案 0 :(得分:0)

我首先说,让我们用零(0)填充正面,以确保我们有一个完整的6,8字符长度值。无论是否存储数据,在处理之前都要考虑最终的数据验证步骤。

这种quandry有两种方法。我会花很长时间,所以你看到了细粒度的步骤。永远有一种更好的方法可以给猫皮肤,但知道增量步骤将有助于为您提供必要的步骤。

  • 将6个字符长度升级为8个字符长度(建议,因为它会创建一个标准格式长度来处理)
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
  • 分别处理它们,长度为6和8。显示上述步骤的变化。