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