转换存储为文本的多种日期格式

时间:2017-03-20 04:01:55

标签: sql tsql sql-view

我有一个列是一个存储为文本的日期列。 这有三种格式。

  1. dd mmm yyyy
  2. MM / DD / YYYY
  3. YYYY-MM-DD
  4. enter image description here

    我需要将所有这些转换为一种格式。我希望112(yyyymmdd)

    任何人都可以提供帮助,因为我不断超出范围错误。

    我已经让它正确地返回

    CONVERT(varchar(10), ISNULL(CAST(cf3.FieldValue as date),CAST('01/01/1900' as date)),101)
    

    但我似乎无法在没有范围错误的情况下转换为yyyymmdd格式。

3 个答案:

答案 0 :(得分:2)

输入:

01 Jan 1900
12/5/2013
2013-12-10

查询:

SELECT CONVERT(VARCHAR, CONVERT(DATE, TestColumn), 112)
FROM tblTestTable 

输出:

19000101
20131205
20131210

使用SQL Server 2008 R2

答案 1 :(得分:1)

您可以将 STR_TO_DATE DATE_FORMAT 结合使用,以获得理想的效果。

SELECT
IFNULL(
  DATE_FORMAT(STR_TO_DATE(COL_NAME, '%d %b %Y'), '%Y%m%d'), 
  IFNULL(
    DATE_FORMAT(STR_TO_DATE(COL_NAME, '%d-%m-%Y'), '%Y%m%d'),
    DATE_FORMAT(STR_TO_DATE(COL_NAME, '%Y-%m-%d'), '%Y%m%d')
  )
) FROM TABLE_NAME;

STR_TO_DATE 会将字符串转换为日期时间数据类型,然后 DATE_FORMAT 会将日期时间转换为所需的数据类型格式( '%Y%m%d' - > 'yyyymmdd' )。

答案 2 :(得分:0)

declare @mydate datetime = '2017-03-20'

select RIGHT('0' + CAST(DATEPART(DD,@mydate) as nvarchar(max)),2) + ' ' + UPPER(CAST(DATENAME(month,@mydate) AS VARCHAR(3))) + ' ' + CAST(DATEPART(YEAR, @mydate) as nvarchar(MAX)) as 'dd mmm yyyy',
RIGHT('0' + CAST(DATEPART(DD,@mydate) as nvarchar(max)),2) + '/' + RIGHT('0' + CAST(DATEPART(MONTH, @mydate) as nvarchar(Max)),2) + '/' + CAST(DATEPART(YEAR, @mydate) as nvarchar(MAX)) as 'dd/mm/yyyy',
CAST(DATEPART(YYYY,@mydate) as nvarchar(max)) + '-' + RIGHT('0' + CAST(DATEPART(MONTH, @mydate) as nvarchar(Max)),2) + '-' + RIGHT('0' + CAST(DATEPART(DD, @mydate) as nvarchar(MAX)),2) as 'yyyy-mm-dd'

您可以手动获取日期的相应日期部分并自行执行格式设置。 (如果不需要格式)