转换存储为文本的多种日期格式
Convert multiple date formats stored as text
我有一列是作为文本存储的日期列。
这里面有三种格式。
- dd mmm yyyy
- MM/dd/yyyy
- yyyy-mm-dd
我需要将所有这些转换为一种格式。我希望 112 (yyyymmdd)
任何人都可以帮助我,因为我一直收到超出范围的错误。
我已经 return 正确
CONVERT(varchar(10), ISNULL(CAST(cf3.FieldValue as date),CAST('01/01/1900' as date)),101)
但我似乎无法在没有范围错误的情况下转换为 yyyymmdd 格式。
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'
您可以手动获取日期对应的日期部分,自行格式化。 (如果需要的格式不容易获得)
您可以结合使用 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
会将字符串转换为 datetime 数据类型,然后 DATE_FORMAT
会将日期时间转换为所需的格式('%Y%m%d'
-> 'yyyymmdd'
)。
输入:
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
我有一列是作为文本存储的日期列。 这里面有三种格式。
- dd mmm yyyy
- MM/dd/yyyy
- yyyy-mm-dd
我需要将所有这些转换为一种格式。我希望 112 (yyyymmdd)
任何人都可以帮助我,因为我一直收到超出范围的错误。
我已经 return 正确
CONVERT(varchar(10), ISNULL(CAST(cf3.FieldValue as date),CAST('01/01/1900' as date)),101)
但我似乎无法在没有范围错误的情况下转换为 yyyymmdd 格式。
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'
您可以手动获取日期对应的日期部分,自行格式化。 (如果需要的格式不容易获得)
您可以结合使用 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
会将字符串转换为 datetime 数据类型,然后 DATE_FORMAT
会将日期时间转换为所需的格式('%Y%m%d'
-> 'yyyymmdd'
)。
输入:
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