我与一个拥有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 :(得分:0)
我首先说,让我们用零(0)填充正面,以确保我们有一个完整的6,8字符长度值。无论是否存储数据,在处理之前都要考虑最终的数据验证步骤。
这种quandry有两种方法。我会花很长时间,所以你看到了细粒度的步骤。永远有一种更好的方法可以给猫皮肤,但知道增量步骤将有助于为您提供必要的步骤。
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