我正在使用varchar(200)数据类型创建一个随机日期表,我无法生成查询显示年份>的显示日期。 2000
例如:
12/03/2017
12/02/1998
12/11/2002
答案 0 :(得分:1)
首先,您不应将日期存储为字符串。以错误的类型存储字段是个坏主意。
其次,如果您必须将日期存储为字符串(偶尔需要),则使用ISO标准格式:YYYY-MM-DD或YYYYMMDD。
对于您使用的格式,您可以提取最后四个字符:
select right(DateWronglyStoredInStringColumn, 4) as yyyy
答案 1 :(得分:0)
您应该在sql server中将日期存储为date
或datetime2
或datetime
数据类型。
对于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(文本)排序或订购年份时要小心。 可能希望将年份转换为整数。