0

我在 SQL Server 中有一个表项目,其字段 StartDate 的值为

15-02-2013 15:02:40
20-08-2011 10:11:20

等我需要从中检索不同的年份值,就像 2013 and 2011我尝试过的查询一样

select (case when charindex(' ', StartDate) > 0
             then left(StartDate, charindex(' ', (StartDate))-1)
             else StartDate
        end) as StartDate FROM [kneipp].[dbo].[kn_projects]

15-02-2013 and 20-08-2011 这给出了结果

select (case when charindex('-', StartDate) > 0
             then right(StartDate, charindex('-', reverse(StartDate))-1)
             else StartDate
        end) as lastone FROM [kneipp].[dbo].[kn_projects]

得到2013 15:02:40 and 2011 10:11:20

如何达到我的预期结果

4

3 回答 3

1

你试过这样表达吗?

SELECT distinct year( convert(datetime,StartDate,105)) 
FROM [kneipp].[dbo].[kn_projects]
于 2013-03-07T09:41:06.960 回答
0

您可以将列转换为 DATETIME 格式

SELECT YEAR(CAST(StartDate AS DATETIME)) FROM [kneipp].[dbo].[kn_projects]
于 2013-03-07T09:39:39.643 回答
0

正如其他人指出的那样,您可以转换为日期时间,如果您想保留数据类型,请尝试以下查询

Declare @t varchar(50),@t1 varchar(50)
set @t='15-02-2013 15:02:40'

Select left(parsename(replace(@t,'-','.'),1),4)

如果您有任何格式的日期时间,请尝试以下表达式,它将以 varchar 数据类型返回年份

Select left(parsename(replace(@t1,'-','.'),1),
            charindex(' ',parsename(replace(@t1,'-','.'),1)))
于 2013-03-07T09:48:11.660 回答