用于显示从日期表开始的年份的SQL查询

时间:2017-03-26 12:53:31

标签: sql sql-server tsql

我正在使用varchar(200)数据类型创建一个随机日期表,我无法生成查询显示年份>的显示日期。 2000

例如:

12/03/2017
12/02/1998
12/11/2002

3 个答案:

答案 0 :(得分:1)

首先,您不应将日期存储为字符串。以错误的类型存储字段是个坏主意。

其次,如果您必须将日期存储为字符串(偶尔需要),则使用ISO标准格式:YYYY-MM-DD或YYYYMMDD。

对于您使用的格式,您可以提取最后四个字符:

select right(DateWronglyStoredInStringColumn, 4) as yyyy

答案 1 :(得分:0)

您应该在sql server中将日期存储为datedatetime2datetime数据类型。

对于sql server 2012之前的sql server版本,请尝试使用convert()

对于首日的日期,请使用set dateformat dmy;

set dateformat dmy;
select 
    year(convert(date,randomDate)) as [Year]
  , randomDate
from t
where year(convert(date,randomDate)) > 2000;

对于sql server 2012+,您可以使用try_convert()

set dateformat dmy;
select 
    year(try_convert(date,randomDate)) as [Year]
  , randomDate
from t
where year(try_convert(date,randomDate)) > 2000;

rextester演示:http://rextester.com/DXVR82331

create table a ( date varchar(200) );
insert into a values
 ('13-09-2017')
,('12-12-1987')
,('27-01-2037')
,('22-04-1877')
,('02-11-1987')
,('16-08-1974');

set dateformat dmy;
select convert(date,a.[date]) as date
from a
where year(convert(date,a.[date])) > 2000;

返回:

+---------------------+
|        date         |
+---------------------+
| 13.09.2017 00:00:00 |
| 27.01.2037 00:00:00 |
+---------------------+

答案 2 :(得分:0)

尝试 选择日期 从哪里转换(char(4),date,121)> '2000' 但是当您使用varchar(文本)排序或订购年份时要小心。 可能希望将年份转换为整数。