2
# Tests for the YEAR() function
4
# The Drizzle YEAR() function differs from the MySQL YEAR()
5
# function in these ways:
7
# * Does not accept invalid parameters. This results in an error
11
# YEAR() on a NULL should produce
16
# Test improper argument list
20
# Wrong parameter count...but unfortunately produces 1064 Syntax Error due to limitations of
21
# the SQL parser, which considers YEAR a keyword before being a function symbol
24
# Wrong parameter count...but unfortunately produces 1064 Syntax Error due to limitations of
25
# the SQL parser, which considers YEAR a keyword before being a function symbol
29
# Test invalid dates passed to YEAR
30
# produce an error, not a NULL or anything
38
SELECT YEAR("0000-00-00"); # No 0000-00-00 dates!...
40
SELECT YEAR("0000-01-01"); # No zero year parts
42
SELECT YEAR("0001-00-01"); # No zero month parts
44
SELECT YEAR("0001-01-00"); # No zero day parts
46
SELECT YEAR("2000-02-30"); # No Feb 30th!
48
SELECT YEAR("1900-02-29"); # Not a leap YEAR since not divisible evenly by 400...
50
SELECT YEAR('1976-15-15'); # No 15th month!
52
# A good date, which should output 2009
53
SELECT YEAR("2009-01-12");
55
# A good date, which should output 1970 - Test of 2 digit YEAR conversion...
56
SELECT YEAR("70-12-31");
58
# A good date, which should output 1999 - Test of 2 digit YEAR conversion...
59
SELECT YEAR("99-12-31");
61
# A good date, which should output 2069 - Test of 2 digit YEAR conversion...
62
SELECT YEAR("69-12-31");
64
# A good date, which should output 1
65
SELECT YEAR("0001-12-31");
67
# A good date, which should output 9999
68
SELECT YEAR("9999-12-31");
70
# A good date in the common USA format, should output 2007
71
SELECT YEAR('07/31/2009');
74
# The following tests should produce errors for YEAR().
78
# Test boundary dates for YEAR
82
# Tests for alternate DATETIME syntaxes
83
# in string and numeric formats. All should
86
SELECT YEAR('20090916');
87
SELECT YEAR('20090916091528');
88
SELECT YEAR("20090916091528.000000");
89
SELECT YEAR('09-09-16');
90
SELECT YEAR('09.09.16');
91
SELECT YEAR('09/09/16');
92
SELECT YEAR('09-09-16');
93
SELECT YEAR('09-9-2');
94
SELECT YEAR(20090916);
95
SELECT YEAR(20090916091528);
96
--error 1686 # Don't yet support DOUBLE -> DATETIME.
97
SELECT YEAR(20090916091528.000000);
99
# Now test field values of different types
103
DROP TABLE IF EXISTS t1;
107
, date_fld DATE NOT NULL
108
, datetime_fld DATETIME NOT NULL
109
, timestamp_fld TIMESTAMP NOT NULL
110
, char_fld CHAR(22) NOT NULL
111
, varchar_fld VARCHAR(22) NOT NULL
112
, text_fld TEXT NOT NULL
113
, blob_fld BLOB NOT NULL
116
INSERT INTO t1 VALUES (
119
, "2007-11-30 16:30:19"
120
, "2007-11-30T16:30:19"
121
, "2007-11-30 16:30:19"
122
, "2007-11-30 16:30:19"
123
, "2007-11-30T16:30:19"
124
, "2007-11-30T16:30:19"
127
SELECT YEAR(int_fld) FROM t1;
128
SELECT YEAR(date_fld) FROM t1;
129
SELECT YEAR(datetime_fld) FROM t1;
130
SELECT YEAR(timestamp_fld) FROM t1;
131
SELECT YEAR(char_fld) FROM t1;
132
SELECT YEAR(varchar_fld) FROM t1;
133
SELECT YEAR(text_fld) FROM t1;
134
SELECT YEAR(blob_fld) FROM t1;