From 4762230b5b2e5b8e78f7fcd14b7c27d1467f0812 Mon Sep 17 00:00:00 2001 From: Sai Rohan Basa Date: Thu, 30 May 2024 22:54:53 +0000 Subject: [PATCH] Added more tests --- contrib/babelfishpg_common/src/datetime.c | 111 +- contrib/babelfishpg_common/src/datetime.h | 33 +- .../babel_4328_datetime-vu-verify.out | 2077 +++++++++++++++-- .../babel_4328_datetime2-vu-verify.out | 1003 +++++++- .../input/babel_4328_datetime-vu-verify.sql | 683 +++++- .../input/babel_4328_datetime2-vu-verify.sql | 365 ++- 6 files changed, 4023 insertions(+), 249 deletions(-) diff --git a/contrib/babelfishpg_common/src/datetime.c b/contrib/babelfishpg_common/src/datetime.c index 9778f59c6ff..2e5e55c0d6b 100644 --- a/contrib/babelfishpg_common/src/datetime.c +++ b/contrib/babelfishpg_common/src/datetime.c @@ -47,6 +47,21 @@ PG_FUNCTION_INFO_V1(datetime_mi_datetime); void CheckDatetimeRange(const Timestamp time); void CheckDatetimePrecision(fsec_t fsec); +static bool +match_regex(char *str, char *regex_exp) +{ + regex_t regex; + int status; + status = regcomp(®ex, regex_exp, REG_EXTENDED); + status = regexec(®ex, str, 0, NULL, 0); + regfree(®ex); + + if (status == 0) + return true; + + return false; +} + /* * This function checks the regex in case of the text month. * We will be checking with the combination of date regex's and @@ -55,10 +70,37 @@ void CheckDatetimePrecision(fsec_t fsec); bool check_regex_for_text_month(char *str, DateTimeContext context) { - regex_t regex; char curr_regex[200]; - int status, i, j; + int i, j; const char *regex_time_offset = "(((\\+|\\-)[0-9]{1,2}:[0-9]{1,2})|Z)?"; + const char *datetime2_offset_supported[] = { + "[0-9]{2}\\s*[a-zA-Z]{3,10}", + "[a-zA-Z]{3,10}\\s*[0-9]{2}" + }; + const int num_datetime2_offset_supported = lengthof(datetime2_offset_supported); + + for (i = 0; i < num_datetime2_offset_supported; i++) { + for (j = 0; j < NUM_TIME_REGEXES; j++) { + if (context == DATE_TIME) + break; + /* + * check for the combination of date and time + */ + strcpy(curr_regex, "^"); + strcat(curr_regex, datetime2_offset_supported[i]); + strcat(curr_regex, "\\s+"); + strcat(curr_regex, time_regexes[j]); + if (context == DATE_TIME_OFFSET) + { + strcat(curr_regex, "\\s*"); + strcat(curr_regex, regex_time_offset); + } + strcat(curr_regex, "$"); + + if(match_regex(str, curr_regex)) + return true; + } + } for (i = 0; i < NUM_DATE_REGEXES; i++) { /* @@ -67,12 +109,9 @@ check_regex_for_text_month(char *str, DateTimeContext context) strcpy(curr_regex, "^"); strcat(curr_regex, date_regexes[i]); strcat(curr_regex, "$"); - status = regcomp(®ex, curr_regex, REG_EXTENDED); - status = regexec(®ex, str, 0, NULL, 0); - regfree(®ex); - if (status == 0) - return 1; + if(match_regex(str, curr_regex)) + return true; for (j = 0; j < NUM_TIME_REGEXES; j++) { /* @@ -86,12 +125,9 @@ check_regex_for_text_month(char *str, DateTimeContext context) strcat(curr_regex, regex_time_offset); } strcat(curr_regex, "$"); - status = regcomp(®ex, curr_regex, REG_EXTENDED); - status = regexec(®ex, str, 0, NULL, 0); - regfree(®ex); - if (status == 0) - return 1; + if(match_regex(str, curr_regex)) + return true; /* * check for the combination of date and time @@ -106,16 +142,13 @@ check_regex_for_text_month(char *str, DateTimeContext context) strcat(curr_regex, regex_time_offset); } strcat(curr_regex, "$"); - status = regcomp(®ex, curr_regex, REG_EXTENDED); - status = regexec(®ex, str, 0, NULL, 0); - regfree(®ex); - if (status == 0) - return 1; + if(match_regex(str, curr_regex)) + return true; } } - return 0; + return false; } /* @@ -129,6 +162,8 @@ clean_input_str(char *str, bool *contains_extra_spaces, DateTimeContext context) int i = 0, j = 0; int last_non_space = -1; int num_colons = 0; + char *context_str = (context == DATE_TIME) ? "datetime" + : ((context == DATE_TIME_2) ? "datetime2" : "datetimeoffset"); while (str[i] != '\0') { @@ -152,7 +187,7 @@ clean_input_str(char *str, bool *contains_extra_spaces, DateTimeContext context) ereport(ERROR, (errcode(ERRCODE_INVALID_DATETIME_FORMAT), - errmsg("invalid input syntax for type datetime: \"%s\"", str))); + errmsg("invalid input syntax for type %s: \"%s\"", context_str, str))); } if (context == DATE_TIME_OFFSET && str[i] == ':') @@ -231,10 +266,12 @@ clean_input_str(char *str, bool *contains_extra_spaces, DateTimeContext context) } } /* - * If the context is DATETIME only ',' and ': are allowed + * If the context is DATETIME only ',' and ':' are allowed * other than above mentioned characters. */ - else if (context != DATE_TIME || (str[i] == ',' || str[i] == ':')) + else if ((str[i] == ',' || str[i] == ':') || + (context != DATE_TIME && (str[i] == '.' || str[i] == '/' + || str[i] == '+' || str[i] == '-'))) { result[j] = str[i]; j++; @@ -246,7 +283,7 @@ clean_input_str(char *str, bool *contains_extra_spaces, DateTimeContext context) ereport(ERROR, (errcode(ERRCODE_INVALID_DATETIME_FORMAT), - errmsg("invalid input syntax for type datetime: \"%s\"", str))); + errmsg("invalid input syntax for type %s: \"%s\"", context_str, str))); } last_non_space = i; @@ -338,6 +375,14 @@ tsql_decode_datetime_fields(char *orig_str, char *str, char **field, int nf, int if (ftype[i] == ISOTIME && (contains_extra_spaces || num_colons < 2)) return 1; + + else if (ftype[i] == ISOTIME) + { + char *regex_exp = "^[0-9]{4}[-][0-9]{2}[-][0-9]{2}[T][0-9]{2}[:][0-9]{2}[:][0-9]{2}([.][0-9]{1,3})?$"; + + if (!match_regex(orig_str, regex_exp)) + return 1; + } if(ftype[i] != MONTH) { @@ -397,12 +442,34 @@ tsql_decode_datetime_fields(char *orig_str, char *str, char **field, int nf, int * exceeds. */ char *cp = field[i]; + /* regex expression for "[m]m-yyyy-[d]d" format */ + char *regex_expr = "^[0-9]{1,2}[-|.|/][0-9]{4}[-|.|/][0-9]{1,2}$"; while (cp != NULL && *cp != '\0' && !isalpha(*cp)) cp++; if (cp != NULL && isalpha(*cp)) continue; + + /* + * If the DATE is in mm-yyyy-dd format, DecodeDateTime + * throws error, hence we need to rearrange it the DATE string + * to mm-dd-yyyy format + */ + + if (match_regex(field[i], regex_expr)) + { + int month = 0, year = 0, day = 0; + cp = field[i]; + + month = strtoi64(cp, &cp, 10); + cp++; + year = strtoi64(cp, &cp, 10); + cp++; + day = strtoi64(cp, &cp, 10); + + sprintf(field[i], "%d.%d.%d", month, day, year); + } if (strlen(field[i]) > 10) return 1; diff --git a/contrib/babelfishpg_common/src/datetime.h b/contrib/babelfishpg_common/src/datetime.h index eafaf4c794f..1579d6619ee 100644 --- a/contrib/babelfishpg_common/src/datetime.h +++ b/contrib/babelfishpg_common/src/datetime.h @@ -42,22 +42,23 @@ typedef enum } DateTimeContext; static const char *const date_regexes[] = { - "[a-zA-Z]{3,5}\\s*[0-9]{1,2}[,]?\\s*([0-9]{4})", // mon [dd][,] yyyy - "[a-zA-Z]{3,5}\\s*[0-9]{1,2}[,]?\\s*([0-9]{4}|[0-9]{2}|[0-9]{1})?", // mon dd[,] [yy] - "[a-zA-Z]{3,5}\\s*[0-9]{4}\\s*[0-9]{1,2}?", // mon yyyy [dd] - "[0-9]{1,2}?\\s*[a-zA-Z]{3,5}[,]?\\s*[0-9]{4}", // [dd] mon[,] yyyy - "[0-9]{1,2}\\s*[a-zA-Z]{3,5}[,]?\\s*[0-9]{2}?[0-9]{2}", // dd mon[,][yy]yy - "[0-9]{1,2}\\s*[0-9]{2}?[0-9]{2}\\s*[a-zA-Z]{3,5}", // dd [yy]yy mon - "[0-9]{1,2}?\\s*[0-9]{4}\\s*[a-zA-Z]{3,5}", // [dd] yyyy mon - "[0-9]{4}\\s*[a-zA-Z]{3,5}\\s*[0-9]{1,2}?", // yyyy mon [dd] - "[0-9]{4}\\s*[0-9]{1,2}?\\s*[a-zA-Z]{3,5}", // yyyy [dd] mon - "[0-9]{2}\\s*[a-zA-Z]{3,5}", // yy mon - "[0-9]{4}\\s*[-]\\s*[a-zA-Z]{3,5}\\s*[-]\\s*[0-9]{1,2}", // yyyy-mon-dd - "[0-9]{4}\\s*[/]\\s*[a-zA-Z]{3,5}\\s*[/]\\s*[0-9]{1,2}", // yyyy/mon/dd - "[0-9]{4}\\s*[.]\\s*[a-zA-Z]{3,5}\\s*[.]\\s*[0-9]{1,2}", // yyyy.mon.dd - "[0-9]{1,2}\\s*[-]\\s*[a-zA-Z]{3,5}\\s*[-]\\s*[0-9]{4}", // dd-mon-[yy]yy - "[0-9]{1,2}\\s*[/]\\s*[a-zA-Z]{3,5}\\s*[/]\\s*[0-9]{4}", // dd/mon/[yy]yy - "[0-9]{1,2}\\s*[.]\\s*[a-zA-Z]{3,5}\\s*[.]\\s*[0-9]{4}" // dd.mon.[yy]yy + "[a-zA-Z]{3,10}\\s*[0-9]{1,2}[,]?\\s*([0-9]{4})", // mon [dd][,] yyyy + "[a-zA-Z]{3,10}\\s*[0-9]{1,2}([,]\\s*([0-9]{4}|[0-9]{2}|[0-9]{1}))", // mon dd[,] [yy] + "[a-zA-Z]{3,10}\\s*[0-9]{1,2}(\\s+([0-9]{4}|[0-9]{2}|[0-9]{1}))", // mon dd[,] [yy] + "[a-zA-Z]{3,10}\\s*[0-9]{4}\\s*[0-9]{1,2}?", // mon yyyy [dd] + "[0-9]{1,2}?\\s*[a-zA-Z]{3,10}[,]?\\s*[0-9]{4}", // [dd] mon[,] yyyy + "[0-9]{1,2}\\s*[a-zA-Z]{3,10}[,]?\\s*[0-9]{2}?[0-9]{2}", // dd mon[,][yy]yy + "[0-9]{1,2}\\s*[a-zA-Z]{3,10}[,]?\\s*[0-9]{1}", // dd mon[,] y + "[0-9]{1,2}\\s*[0-9]{2}?[0-9]{2}\\s*[a-zA-Z]{3,10}", // dd [yy]yy mon + "[0-9]{1,2}?\\s*[0-9]{4}\\s*[a-zA-Z]{3,10}", // [dd] yyyy mon + "[0-9]{4}\\s*[a-zA-Z]{3,10}\\s*[0-9]{1,2}?", // yyyy mon [dd] + "[0-9]{4}\\s*[0-9]{1,2}?\\s*[a-zA-Z]{3,10}", // yyyy [dd] mon + "[0-9]{4}\\s*[-]\\s*[a-zA-Z]{3,10}\\s*[-]\\s*[0-9]{1,2}", // yyyy-mon-dd + "[0-9]{4}\\s*[/]\\s*[a-zA-Z]{3,10}\\s*[/]\\s*[0-9]{1,2}", // yyyy/mon/dd + "[0-9]{4}\\s*[.]\\s*[a-zA-Z]{3,10}\\s*[.]\\s*[0-9]{1,2}", // yyyy.mon.dd + "[0-9]{1,2}\\s*[-]\\s*[a-zA-Z]{3,10}\\s*[-]\\s*[0-9]{4}", // dd-mon-[yy]yy + "[0-9]{1,2}\\s*[/]\\s*[a-zA-Z]{3,10}\\s*[/]\\s*[0-9]{4}", // dd/mon/[yy]yy + "[0-9]{1,2}\\s*[.]\\s*[a-zA-Z]{3,10}\\s*[.]\\s*[0-9]{4}" // dd.mon.[yy]yy }; #define NUM_DATE_REGEXES lengthof(date_regexes) diff --git a/test/JDBC/expected/babel_4328_datetime-vu-verify.out b/test/JDBC/expected/babel_4328_datetime-vu-verify.out index 8bd5b345018..cf3a3ae3953 100644 --- a/test/JDBC/expected/babel_4328_datetime-vu-verify.out +++ b/test/JDBC/expected/babel_4328_datetime-vu-verify.out @@ -1,3 +1,11 @@ +SELECT CAST('' AS DATETIME) +go +~~START~~ +datetime +1900-01-01 00:00:00.0 +~~END~~ + + -- DATE -- -- Numeric: [m]m[d]d([y]y|yyyy) select cast('3-2-4' as datetime) @@ -128,372 +136,2018 @@ datetime ~~END~~ --- invalid syntax -select cast('3#12#2024' as datetime) -go -~~ERROR (Code: 33557097)~~ - -~~ERROR (Message: invalid input syntax for type datetime: "3#12#2024")~~ +SELECT CAST('3-2-4 14:30' AS DATETIME) +GO +~~START~~ +datetime +2004-03-02 14:30:00.0 +~~END~~ -select cast('3/12.2024' as datetime) -go +SELECT CAST('3-12-4 14:30' AS DATETIME) +GO ~~START~~ datetime -2024-03-12 00:00:00.0 +2004-03-12 14:30:00.0 ~~END~~ --- Alphabetical -select cast('Apr 12,2000' as datetime) -go +SELECT CAST('3-12-24 14:30' AS DATETIME) +GO ~~START~~ datetime -2000-04-12 00:00:00.0 +2024-03-12 14:30:00.0 ~~END~~ -select cast('Apr 12 2000' as datetime) -go +SELECT CAST('3-12-2024 14:30' AS DATETIME) +GO ~~START~~ datetime -2000-04-12 00:00:00.0 +2024-03-12 14:30:00.0 ~~END~~ -select cast('Apr 1 2000' as datetime) -go +SELECT CAST('11-12-2024 14:30' AS DATETIME) +GO ~~START~~ datetime -2000-04-01 00:00:00.0 +2024-11-12 14:30:00.0 ~~END~~ -select cast('Apr 1,2000' as datetime) -go +SELECT CAST('3 - 12 - 2024 14:30' AS DATETIME) +GO ~~START~~ datetime -2000-04-01 00:00:00.0 +2024-03-12 14:30:00.0 ~~END~~ -select cast('Apr 2000' as datetime) -go +SELECT CAST('3.2.4 14:30' AS DATETIME) +GO ~~START~~ datetime -2000-04-01 00:00:00.0 +2004-03-02 14:30:00.0 ~~END~~ -select cast('Apr 16, 2000' as datetime) -go +SELECT CAST('3.12.4 14:30' AS DATETIME) +GO ~~START~~ datetime -2000-04-16 00:00:00.0 +2004-03-12 14:30:00.0 ~~END~~ -select cast('Apr 1, 2000' as datetime) -go +SELECT CAST('3.12.24 14:30' AS DATETIME) +GO ~~START~~ datetime -2000-04-01 00:00:00.0 +2024-03-12 14:30:00.0 ~~END~~ -select cast('April 16, 2000' as datetime) -go +SELECT CAST('3.12.2024 14:30' AS DATETIME) +GO ~~START~~ datetime -2000-04-16 00:00:00.0 +2024-03-12 14:30:00.0 ~~END~~ -select cast('April 16 2000' as datetime) -go +SELECT CAST('11.12.2024 14:30' AS DATETIME) +GO ~~START~~ datetime -2000-04-16 00:00:00.0 +2024-11-12 14:30:00.0 ~~END~~ -select cast('Apr 16, 24' as datetime) -go +SELECT CAST('3 . 12 . 2024 14:30' AS DATETIME) +GO ~~START~~ datetime -2024-04-16 00:00:00.0 +2024-03-12 14:30:00.0 ~~END~~ -select cast('Apr 16,4' as datetime) -go +SELECT CAST('3/2/4 14:30' AS DATETIME) +GO ~~START~~ datetime -2004-04-16 00:00:00.0 +2004-03-02 14:30:00.0 ~~END~~ -select cast('Apr 1,4' as datetime) -go +SELECT CAST('3/12/4 14:30' AS DATETIME) +GO ~~START~~ datetime -2004-04-01 00:00:00.0 +2004-03-12 14:30:00.0 ~~END~~ -select cast('Apr 16 24' as datetime) -go +SELECT CAST('3/12/24 14:30' AS DATETIME) +GO ~~START~~ datetime -2024-04-16 00:00:00.0 +2024-03-12 14:30:00.0 ~~END~~ -select cast('Apr 16 4' as datetime) -go +SELECT CAST('3/12/2024 14:30' AS DATETIME) +GO ~~START~~ datetime -2004-04-16 00:00:00.0 +2024-03-12 14:30:00.0 ~~END~~ -select cast('April 16' as datetime) -go -~~ERROR (Code: 33557097)~~ - -~~ERROR (Message: invalid input syntax for type datetime: "April 16")~~ +SELECT CAST('11/12/2024 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-11-12 14:30:00.0 +~~END~~ -select cast('Apr 2024' as datetime) -go +SELECT CAST('3 / 12 / 2024 14:30' AS DATETIME) +GO ~~START~~ datetime -2024-04-01 00:00:00.0 +2024-03-12 14:30:00.0 ~~END~~ -select cast('Apr 2024 22' as datetime) -go +-- [m]m([y]y|yyyy)[d]d +SELECT CAST('3-4-2 14:30' AS DATETIME) +GO ~~START~~ datetime -2024-04-22 00:00:00.0 +2002-03-04 14:30:00.0 ~~END~~ -select cast('Apr 2024 2' as datetime) -go +SELECT CAST('3-4-12 14:30' AS DATETIME) +GO ~~START~~ datetime -2024-04-02 00:00:00.0 +2012-03-04 14:30:00.0 ~~END~~ -select cast('24 Apr, 2024' as datetime) -go +SELECT CAST('3-24-12 14:30' AS DATETIME) +GO ~~START~~ datetime -2024-04-24 00:00:00.0 +2012-03-24 14:30:00.0 ~~END~~ -select cast('3 Apr, 2024' as datetime) -go +SELECT CAST('3-2024-12 14:30' AS DATETIME) +GO ~~START~~ datetime -2024-04-03 00:00:00.0 +2024-03-12 14:30:00.0 ~~END~~ -select cast('Apr, 2024' as datetime) -go +SELECT CAST('11-2024-12 14:30' AS DATETIME) +GO ~~START~~ datetime -2024-04-01 00:00:00.0 +2024-11-12 14:30:00.0 ~~END~~ -select cast('Apr 2024' as datetime) -go +SELECT CAST('3 - 2024 - 12 14:30' AS DATETIME) +GO ~~START~~ datetime -2024-04-01 00:00:00.0 +2024-03-12 14:30:00.0 ~~END~~ -select cast('3 Apr 2024' as datetime) -go +SELECT CAST('3.4.2 14:30' AS DATETIME) +GO ~~START~~ datetime -2024-04-03 00:00:00.0 +2002-03-04 14:30:00.0 ~~END~~ -select cast('3Apr2024' as datetime) -go +SELECT CAST('3.4.12 14:30' AS DATETIME) +GO ~~START~~ datetime -2024-04-03 00:00:00.0 +2012-03-04 14:30:00.0 ~~END~~ -select cast('3Apr24' as datetime) -go +SELECT CAST('3.24.12 14:30' AS DATETIME) +GO ~~START~~ datetime -2024-04-03 00:00:00.0 +2012-03-24 14:30:00.0 ~~END~~ -select cast('Apr24' as datetime) -go -~~ERROR (Code: 33557097)~~ - -~~ERROR (Message: invalid input syntax for type datetime: "Apr24")~~ +SELECT CAST('3.2024.12 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-03-12 14:30:00.0 +~~END~~ -select cast('Apr,24' as datetime) -go -~~ERROR (Code: 33557097)~~ +SELECT CAST('11.2024.12 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-11-12 14:30:00.0 +~~END~~ -~~ERROR (Message: invalid input syntax for type datetime: "Apr,24")~~ +SELECT CAST('3 . 2024 . 12 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-03-12 14:30:00.0 +~~END~~ -select cast('24 Apr' as datetime) -go -~~ERROR (Code: 33557097)~~ -~~ERROR (Message: invalid input syntax for type datetime: "24 Apr")~~ +SELECT CAST('3/4/2 14:30' AS DATETIME) +GO +~~START~~ +datetime +2002-03-04 14:30:00.0 +~~END~~ -select cast('12 24 Apr' as datetime) -go +SELECT CAST('3/4/12 14:30' AS DATETIME) +GO ~~START~~ datetime -2024-04-12 00:00:00.0 +2012-03-04 14:30:00.0 ~~END~~ -select cast('12 2024 Apr' as datetime) -go +SELECT CAST('3/24/12 14:30' AS DATETIME) +GO ~~START~~ datetime -2024-04-12 00:00:00.0 +2012-03-24 14:30:00.0 ~~END~~ -select cast('2024 Apr' as datetime) -go +SELECT CAST('3/2024/12 14:30' AS DATETIME) +GO ~~START~~ datetime -2024-04-01 00:00:00.0 +2024-03-12 14:30:00.0 ~~END~~ -select cast('2024 12 Apr' as datetime) -go +SELECT CAST('11/2024/12 14:30' AS DATETIME) +GO ~~START~~ datetime -2024-04-12 00:00:00.0 +2024-11-12 14:30:00.0 ~~END~~ -select cast('2024 9 Apr' as datetime) -go +SELECT CAST('3 / 2024 / 12 14:30' AS DATETIME) +GO ~~START~~ datetime -2024-04-09 00:00:00.0 +2024-03-12 14:30:00.0 ~~END~~ -select cast('2024 Apr 12' as datetime) -go +-- [d]d[m]m([y]y|yyyy) +SELECT CAST('2-3-4 14:30' AS DATETIME) +GO ~~START~~ datetime -2024-04-12 00:00:00.0 +2004-02-03 14:30:00.0 ~~END~~ --- ISO 8601 -select cast('2023-11-27' as datetime) -go +SELECT CAST('12-3-4 14:30' AS DATETIME) +GO ~~START~~ datetime -2023-11-27 00:00:00.0 +2004-12-03 14:30:00.0 ~~END~~ -select cast('2023-2-29' as datetime) -go -~~ERROR (Code: 33557097)~~ - -~~ERROR (Message: date/time field value out of range: "2023-2-29")~~ +SELECT CAST('12-3-24 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-12-03 14:30:00.0 +~~END~~ -select cast('2022-10-30T03:00:00.123' as datetime) -go +SELECT CAST('12-3-2024 14:30' AS DATETIME) +GO ~~START~~ datetime -2022-10-30 03:00:00.123 +2024-12-03 14:30:00.0 ~~END~~ -select cast('2022-10-30T03:00:00.123-11:11' as datetime) -go -~~ERROR (Code: 33557097)~~ - -~~ERROR (Message: invalid input syntax for type datetime: "2022-10-30T03:00:00.123-11:11")~~ +SELECT CAST('12-11-2024 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-12-11 14:30:00.0 +~~END~~ --- Unseparated -select cast('20240129' as datetime) -go +SELECT CAST('12 - 3 - 2024 14:30' AS DATETIME) +GO ~~START~~ datetime -2024-01-29 00:00:00.0 +2024-12-03 14:30:00.0 ~~END~~ -select cast('20241329' as datetime) -go -~~ERROR (Code: 33557097)~~ - -~~ERROR (Message: date/time field value out of range: "20241329")~~ +SELECT CAST('2.3.4 14:30' AS DATETIME) +GO +~~START~~ +datetime +2004-02-03 14:30:00.0 +~~END~~ -select cast('240129' as datetime) -go +SELECT CAST('12.3.4 14:30' AS DATETIME) +GO ~~START~~ datetime -2024-01-29 00:00:00.0 +2004-12-03 14:30:00.0 ~~END~~ -select cast('241329' as datetime) -go -~~ERROR (Code: 33557097)~~ +SELECT CAST('12.3.24 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-12-03 14:30:00.0 +~~END~~ -~~ERROR (Message: date/time field value out of range: "241329")~~ +SELECT CAST('12.3.2024 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-12-03 14:30:00.0 +~~END~~ -select cast('2001' as datetime) -go + +SELECT CAST('12.11.2024 14:30' AS DATETIME) +GO ~~START~~ datetime -2001-01-01 00:00:00.0 +2024-12-11 14:30:00.0 ~~END~~ -select cast('0001' as datetime) -go -~~ERROR (Code: 517)~~ +SELECT CAST('12 . 3 . 2024 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-12-03 14:30:00.0 +~~END~~ -~~ERROR (Message: data out of range for datetime)~~ +SELECT CAST('2/3/4 14:30' AS DATETIME) +GO +~~START~~ +datetime +2004-02-03 14:30:00.0 +~~END~~ --- -- invalid syntax -select cast('0' as datetime) -go -~~ERROR (Code: 33557097)~~ + +SELECT CAST('12/3/4 14:30' AS DATETIME) +GO +~~START~~ +datetime +2004-12-03 14:30:00.0 +~~END~~ + + +SELECT CAST('12/3/24 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-12-03 14:30:00.0 +~~END~~ + + +SELECT CAST('12/3/2024 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-12-03 14:30:00.0 +~~END~~ + + +SELECT CAST('12/11/2024 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-12-11 14:30:00.0 +~~END~~ + + +SELECT CAST('12 / 3 / 2024 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-12-03 14:30:00.0 +~~END~~ + + +-- [d]d([y]y|yyyy)[m]m +SELECT CAST('2-4-3 14:30' AS DATETIME) +GO +~~START~~ +datetime +2003-02-04 14:30:00.0 +~~END~~ + + +SELECT CAST('12-4-3 14:30' AS DATETIME) +GO +~~START~~ +datetime +2003-12-04 14:30:00.0 +~~END~~ + + +SELECT CAST('12-24-3 14:30' AS DATETIME) +GO +~~START~~ +datetime +2003-12-24 14:30:00.0 +~~END~~ + + +SELECT CAST('12-2024-3 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-12-03 14:30:00.0 +~~END~~ + + +SELECT CAST('12-2024-11 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-12-11 14:30:00.0 +~~END~~ + + +SELECT CAST('12 - 2024 - 3 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-12-03 14:30:00.0 +~~END~~ + + +SELECT CAST('2.4.3 14:30' AS DATETIME) +GO +~~START~~ +datetime +2003-02-04 14:30:00.0 +~~END~~ + + +SELECT CAST('12.4.3 14:30' AS DATETIME) +GO +~~START~~ +datetime +2003-12-04 14:30:00.0 +~~END~~ + + +SELECT CAST('12.24.3 14:30' AS DATETIME) +GO +~~START~~ +datetime +2003-12-24 14:30:00.0 +~~END~~ + + +SELECT CAST('12.2024.3 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-12-03 14:30:00.0 +~~END~~ + + +SELECT CAST('12.2024.11 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-12-11 14:30:00.0 +~~END~~ + + +SELECT CAST('12 . 2024 . 3 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-12-03 14:30:00.0 +~~END~~ + + +SELECT CAST('2/4/3 14:30' AS DATETIME) +GO +~~START~~ +datetime +2003-02-04 14:30:00.0 +~~END~~ + + +SELECT CAST('12/4/3 14:30' AS DATETIME) +GO +~~START~~ +datetime +2003-12-04 14:30:00.0 +~~END~~ + + +SELECT CAST('12/24/3 14:30' AS DATETIME) +GO +~~START~~ +datetime +2003-12-24 14:30:00.0 +~~END~~ + + +SELECT CAST('12/2024/3 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-12-03 14:30:00.0 +~~END~~ + + +SELECT CAST('12/2024/11 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-12-11 14:30:00.0 +~~END~~ + + +SELECT CAST('12 / 2024 / 3 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-12-03 14:30:00.0 +~~END~~ + + +-- ([y]y|yyyy)[m]m[d]d +SELECT CAST('4-3-2 14:30' AS DATETIME) +GO +~~START~~ +datetime +2002-04-03 14:30:00.0 +~~END~~ + + +SELECT CAST('4-3-12 14:30' AS DATETIME) +GO +~~START~~ +datetime +2012-04-03 14:30:00.0 +~~END~~ + + +SELECT CAST('24-3-12 14:30' AS DATETIME) +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: date/time field value out of range: "24-3-12 14:30")~~ + + +SELECT CAST('2024-3-12 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-03-12 14:30:00.0 +~~END~~ + + +SELECT CAST('2024-11-12 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-11-12 14:30:00.0 +~~END~~ + + +SELECT CAST('2024 - 3 - 12 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-03-12 14:30:00.0 +~~END~~ + + +SELECT CAST('4.3.2 14:30' AS DATETIME) +GO +~~START~~ +datetime +2002-04-03 14:30:00.0 +~~END~~ + + +SELECT CAST('4.3.12 14:30' AS DATETIME) +GO +~~START~~ +datetime +2012-04-03 14:30:00.0 +~~END~~ + + +SELECT CAST('24.3.12 14:30' AS DATETIME) +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: date/time field value out of range: "24.3.12 14:30")~~ + + +SELECT CAST('2024.3.12 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-03-12 14:30:00.0 +~~END~~ + + +SELECT CAST('2024.11.12 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-11-12 14:30:00.0 +~~END~~ + + +SELECT CAST('2024 . 3 . 12 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-03-12 14:30:00.0 +~~END~~ + + +SELECT CAST('4/3/2 14:30' AS DATETIME) +GO +~~START~~ +datetime +2002-04-03 14:30:00.0 +~~END~~ + + +SELECT CAST('4/3/12 14:30' AS DATETIME) +GO +~~START~~ +datetime +2012-04-03 14:30:00.0 +~~END~~ + + +SELECT CAST('24/3/12 14:30' AS DATETIME) +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: date/time field value out of range: "24/3/12 14:30")~~ + + +SELECT CAST('2024/3/12 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-03-12 14:30:00.0 +~~END~~ + + +SELECT CAST('2024/11/12 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-11-12 14:30:00.0 +~~END~~ + + +SELECT CAST('2024 / 3 / 12 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-03-12 14:30:00.0 +~~END~~ + + +-- combination of different seperator also works for DATETIME +SELECT CAST('2024/11-12 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-11-12 14:30:00.0 +~~END~~ + + +SELECT CAST('2024-11/12 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-11-12 14:30:00.0 +~~END~~ + + +SELECT CAST('2024.11/12 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-11-12 14:30:00.0 +~~END~~ + + +SELECT CAST('2024.11-12 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-11-12 14:30:00.0 +~~END~~ + + +-- invalid syntax +SELECT CAST('3 12 2024' AS DATETIME) +GO +~~START~~ +datetime +2024-03-12 00:00:00.0 +~~END~~ + + +-- invalid syntax +select cast('3#12#2024' as datetime) +go +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: invalid input syntax for type datetime: "3#12#2024")~~ + + +select cast('3/12.2024' as datetime) +go +~~START~~ +datetime +2024-03-12 00:00:00.0 +~~END~~ + + +-- Alphabetical +select cast('Apr 12,2000' as datetime) +go +~~START~~ +datetime +2000-04-12 00:00:00.0 +~~END~~ + + +select cast('Apr 12 2000' as datetime) +go +~~START~~ +datetime +2000-04-12 00:00:00.0 +~~END~~ + + +select cast('Apr 1 2000' as datetime) +go +~~START~~ +datetime +2000-04-01 00:00:00.0 +~~END~~ + + +select cast('Apr 1,2000' as datetime) +go +~~START~~ +datetime +2000-04-01 00:00:00.0 +~~END~~ + + +select cast('Apr 2000' as datetime) +go +~~START~~ +datetime +2000-04-01 00:00:00.0 +~~END~~ + + +select cast('Apr 16, 2000' as datetime) +go +~~START~~ +datetime +2000-04-16 00:00:00.0 +~~END~~ + + +select cast('Apr 1, 2000' as datetime) +go +~~START~~ +datetime +2000-04-01 00:00:00.0 +~~END~~ + + +select cast('April 16, 2000' as datetime) +go +~~START~~ +datetime +2000-04-16 00:00:00.0 +~~END~~ + + +select cast('April 16 2000' as datetime) +go +~~START~~ +datetime +2000-04-16 00:00:00.0 +~~END~~ + + +select cast('Apr 16, 24' as datetime) +go +~~START~~ +datetime +2024-04-16 00:00:00.0 +~~END~~ + + +select cast('Apr 16,4' as datetime) +go +~~START~~ +datetime +2004-04-16 00:00:00.0 +~~END~~ + + +select cast('Apr 1,4' as datetime) +go +~~START~~ +datetime +2004-04-01 00:00:00.0 +~~END~~ + + +select cast('Apr 16 24' as datetime) +go +~~START~~ +datetime +2024-04-16 00:00:00.0 +~~END~~ + + +select cast('Apr 16 4' as datetime) +go +~~START~~ +datetime +2004-04-16 00:00:00.0 +~~END~~ + + +select cast('April 16' as datetime) +go +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: invalid input syntax for type datetime: "April 16")~~ + + +select cast('Apr 2024' as datetime) +go +~~START~~ +datetime +2024-04-01 00:00:00.0 +~~END~~ + + +select cast('Apr 2024 22' as datetime) +go +~~START~~ +datetime +2024-04-22 00:00:00.0 +~~END~~ + + +select cast('Apr 2024 2' as datetime) +go +~~START~~ +datetime +2024-04-02 00:00:00.0 +~~END~~ + + +select cast('24 Apr, 2024' as datetime) +go +~~START~~ +datetime +2024-04-24 00:00:00.0 +~~END~~ + + +select cast('3 Apr, 2024' as datetime) +go +~~START~~ +datetime +2024-04-03 00:00:00.0 +~~END~~ + + +select cast('Apr, 2024' as datetime) +go +~~START~~ +datetime +2024-04-01 00:00:00.0 +~~END~~ + + +select cast('Apr 2024' as datetime) +go +~~START~~ +datetime +2024-04-01 00:00:00.0 +~~END~~ + + +select cast('3 Apr 2024' as datetime) +go +~~START~~ +datetime +2024-04-03 00:00:00.0 +~~END~~ + + +select cast('3Apr2024' as datetime) +go +~~START~~ +datetime +2024-04-03 00:00:00.0 +~~END~~ + + +select cast('3Apr24' as datetime) +go +~~START~~ +datetime +2024-04-03 00:00:00.0 +~~END~~ + + +select cast('Apr24' as datetime) +go +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: invalid input syntax for type datetime: "Apr24")~~ + + +select cast('Apr,24' as datetime) +go +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: invalid input syntax for type datetime: "Apr,24")~~ + + +select cast('24 Apr' as datetime) +go +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: invalid input syntax for type datetime: "24 Apr")~~ + + +select cast('12 24 Apr' as datetime) +go +~~START~~ +datetime +2024-04-12 00:00:00.0 +~~END~~ + + +select cast('12 2024 Apr' as datetime) +go +~~START~~ +datetime +2024-04-12 00:00:00.0 +~~END~~ + + +select cast('2024 Apr' as datetime) +go +~~START~~ +datetime +2024-04-01 00:00:00.0 +~~END~~ + + +select cast('2024 12 Apr' as datetime) +go +~~START~~ +datetime +2024-04-12 00:00:00.0 +~~END~~ + + +select cast('2024 9 Apr' as datetime) +go +~~START~~ +datetime +2024-04-09 00:00:00.0 +~~END~~ + + +select cast('2024 Apr 12' as datetime) +go +~~START~~ +datetime +2024-04-12 00:00:00.0 +~~END~~ + + +--- mon [dd][,] yyyy +SELECT CAST('Apr 12,2000 14:30' AS DATETIME) +GO +~~START~~ +datetime +2000-04-12 14:30:00.0 +~~END~~ + + +SELECT CAST('Apr 12 2000 14:30' AS DATETIME) +GO +~~START~~ +datetime +2000-04-12 14:30:00.0 +~~END~~ + + +SELECT CAST('Apr 1,2000 14:30' AS DATETIME) +GO +~~START~~ +datetime +2000-04-01 14:30:00.0 +~~END~~ + + +SELECT CAST('Apr 1 2000 14:30' AS DATETIME) +GO +~~START~~ +datetime +2000-04-01 14:30:00.0 +~~END~~ + + +SELECT CAST('Apr,2000 14:30' AS DATETIME) +GO +~~START~~ +datetime +2000-04-01 14:30:00.0 +~~END~~ + + +SELECT CAST('Apr 2000 14:30' AS DATETIME) +GO +~~START~~ +datetime +2000-04-01 14:30:00.0 +~~END~~ + + +SELECT CAST('Apr12,2000 14:30' AS DATETIME) +GO +~~START~~ +datetime +2000-04-12 14:30:00.0 +~~END~~ + + +SELECT CAST('Apr12 2000 14:30' AS DATETIME) +GO +~~START~~ +datetime +2000-04-12 14:30:00.0 +~~END~~ + + + +SELECT CAST('Apr1,2000 14:30' AS DATETIME) +GO +~~START~~ +datetime +2000-04-01 14:30:00.0 +~~END~~ + + +SELECT CAST('Apr1 2000 14:30' AS DATETIME) +GO +~~START~~ +datetime +2000-04-01 14:30:00.0 +~~END~~ + + +SELECT CAST('Apr,2000 14:30' AS DATETIME) +GO +~~START~~ +datetime +2000-04-01 14:30:00.0 +~~END~~ + + +SELECT CAST('Apr2000 14:30' AS DATETIME) +GO +~~START~~ +datetime +2000-04-01 14:30:00.0 +~~END~~ + + +--- mon [d]d[,] [yy] +SELECT CAST('Apr 12, 24 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-12 14:30:00.0 +~~END~~ + + +SELECT CAST('Apr 12 24 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-12 14:30:00.0 +~~END~~ + + +SELECT CAST('Apr 12, 4 14:30' AS DATETIME) +GO +~~START~~ +datetime +2004-04-12 14:30:00.0 +~~END~~ + + +SELECT CAST('Apr 12 4 14:30' AS DATETIME) +GO +~~START~~ +datetime +2004-04-12 14:30:00.0 +~~END~~ + + +SELECT CAST('Apr 12, 14:30' AS DATETIME) +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: invalid input syntax for type datetime: "Apr 12, 14:30")~~ + + +SELECT CAST('Apr 12 14:30' AS DATETIME) +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: invalid input syntax for type datetime: "Apr 12 14:30")~~ + + +SELECT CAST('Apr 1, 24 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-01 14:30:00.0 +~~END~~ + + +SELECT CAST('Apr 1 24 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-01 14:30:00.0 +~~END~~ + + +SELECT CAST('Apr 1, 4 14:30' AS DATETIME) +GO +~~START~~ +datetime +2004-04-01 14:30:00.0 +~~END~~ + + +SELECT CAST('Apr 1 4 14:30' AS DATETIME) +GO +~~START~~ +datetime +2004-04-01 14:30:00.0 +~~END~~ + + +SELECT CAST('Apr 1, 14:30' AS DATETIME) +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: invalid input syntax for type datetime: "Apr 1, 14:30")~~ + + +SELECT CAST('Apr 1 14:30' AS DATETIME) +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: invalid input syntax for type datetime: "Apr 1 14:30")~~ + + +SELECT CAST('Apr12, 24 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-12 14:30:00.0 +~~END~~ + + +SELECT CAST('Apr12 24 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-12 14:30:00.0 +~~END~~ + + +SELECT CAST('Apr12, 4 14:30' AS DATETIME) +GO +~~START~~ +datetime +2004-04-12 14:30:00.0 +~~END~~ + + +SELECT CAST('Apr12 4 14:30' AS DATETIME) +GO +~~START~~ +datetime +2004-04-12 14:30:00.0 +~~END~~ + + +SELECT CAST('Apr12, 14:30' AS DATETIME) +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: invalid input syntax for type datetime: "Apr12, 14:30")~~ + + +SELECT CAST('Apr12 14:30' AS DATETIME) +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: invalid input syntax for type datetime: "Apr12 14:30")~~ + + +SELECT CAST('Apr1, 24 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-01 14:30:00.0 +~~END~~ + + +SELECT CAST('Apr1 24 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-01 14:30:00.0 +~~END~~ + + +SELECT CAST('Apr1, 4 14:30' AS DATETIME) +GO +~~START~~ +datetime +2004-04-01 14:30:00.0 +~~END~~ + + +SELECT CAST('Apr1 4 14:30' AS DATETIME) +GO +~~START~~ +datetime +2004-04-01 14:30:00.0 +~~END~~ + + +SELECT CAST('Apr1, 14:30' AS DATETIME) +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: invalid input syntax for type datetime: "Apr1, 14:30")~~ + + +SELECT CAST('Apr1 14:30' AS DATETIME) +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: invalid input syntax for type datetime: "Apr1 14:30")~~ + + +--- mon yyyy [dd] +SELECT CAST('Apr 2024 22 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-22 14:30:00.0 +~~END~~ + + +SELECT CAST('Apr 2024 2 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-02 14:30:00.0 +~~END~~ + + +SELECT CAST('Apr 2024 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-01 14:30:00.0 +~~END~~ + + +SELECT CAST('Apr2024 22 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-22 14:30:00.0 +~~END~~ + + +SELECT CAST('Apr2024 2 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-02 14:30:00.0 +~~END~~ + + +SELECT CAST('Apr2024 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-01 14:30:00.0 +~~END~~ + + +--- [dd] mon[,] yyyy +SELECT CAST('24 Apr, 2024 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-24 14:30:00.0 +~~END~~ + + +SELECT CAST('24 Apr 2024 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-24 14:30:00.0 +~~END~~ + + +SELECT CAST('4 Apr, 2024 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-04 14:30:00.0 +~~END~~ + + +SELECT CAST('4 Apr 2024 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-04 14:30:00.0 +~~END~~ + + +SELECT CAST('Apr, 2024 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-01 14:30:00.0 +~~END~~ + + +SELECT CAST('Apr 2024 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-01 14:30:00.0 +~~END~~ + + +SELECT CAST('24Apr, 2024 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-24 14:30:00.0 +~~END~~ + + +SELECT CAST('24Apr2024 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-24 14:30:00.0 +~~END~~ + + +SELECT CAST('4Apr, 2024 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-04 14:30:00.0 +~~END~~ + + +SELECT CAST('4Apr2024 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-04 14:30:00.0 +~~END~~ + + +SELECT CAST('Apr, 2024 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-01 14:30:00.0 +~~END~~ + + +SELECT CAST('Apr2024 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-01 14:30:00.0 +~~END~~ + + +--- dd mon[,][yy]yy +SELECT CAST('12 Apr, 2024 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-12 14:30:00.0 +~~END~~ + + +SELECT CAST('12 Apr 2024 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-12 14:30:00.0 +~~END~~ + + +SELECT CAST('12 Apr, 24 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-12 14:30:00.0 +~~END~~ + + +SELECT CAST('12 Apr 24 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-12 14:30:00.0 +~~END~~ + + +SELECT CAST('12 Apr, 4 14:30' AS DATETIME) +GO +~~START~~ +datetime +2004-04-12 14:30:00.0 +~~END~~ + + +SELECT CAST('12 Apr 4 14:30' AS DATETIME) +GO +~~START~~ +datetime +2004-04-12 14:30:00.0 +~~END~~ + + +SELECT CAST('12 Apr, 14:30' AS DATETIME) +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: invalid input syntax for type datetime: "12 Apr, 14:30")~~ + + +SELECT CAST('12 Apr 14:30' AS DATETIME) +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: invalid input syntax for type datetime: "12 Apr 14:30")~~ + + +SELECT CAST('12Apr, 2024 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-12 14:30:00.0 +~~END~~ + + +SELECT CAST('12Apr2024 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-12 14:30:00.0 +~~END~~ + + +SELECT CAST('12Apr, 24 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-12 14:30:00.0 +~~END~~ + + +SELECT CAST('12Apr24 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-12 14:30:00.0 +~~END~~ + + +SELECT CAST('12Apr, 4 14:30' AS DATETIME) +GO +~~START~~ +datetime +2004-04-12 14:30:00.0 +~~END~~ + + +SELECT CAST('12Apr4 14:30' AS DATETIME) +GO +~~START~~ +datetime +2004-04-12 14:30:00.0 +~~END~~ + + +SELECT CAST('12Apr, 14:30' AS DATETIME) +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: invalid input syntax for type datetime: "12Apr, 14:30")~~ + + +SELECT CAST('12Apr 14:30' AS DATETIME) +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: invalid input syntax for type datetime: "12Apr 14:30")~~ + + +--- dd [yy]yy mon +SELECT CAST('12 2024 Apr 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-12 14:30:00.0 +~~END~~ + + +SELECT CAST('12 24 Apr 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-12 14:30:00.0 +~~END~~ + + +SELECT CAST('12 2024Apr 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-12 14:30:00.0 +~~END~~ + + +SELECT CAST('12 24Apr 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-12 14:30:00.0 +~~END~~ + + +--- [dd] yyyy mon +SELECT CAST('12 2024 Apr 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-12 14:30:00.0 +~~END~~ + + +SELECT CAST('2 2024 Apr 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-02 14:30:00.0 +~~END~~ + + +SELECT CAST('2024 Apr 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-01 14:30:00.0 +~~END~~ + + +SELECT CAST('12 2024Apr 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-12 14:30:00.0 +~~END~~ + + +SELECT CAST('2 2024Apr 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-02 14:30:00.0 +~~END~~ + + +SELECT CAST('2024Apr 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-01 14:30:00.0 +~~END~~ + + +--- yyyy mon [dd] +SELECT CAST('2024 Apr 12 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-12 14:30:00.0 +~~END~~ + + +SELECT CAST('2024 Apr 2 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-02 14:30:00.0 +~~END~~ + + +SELECT CAST('2024 Apr 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-01 14:30:00.0 +~~END~~ + + +SELECT CAST('2024Apr12 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-12 14:30:00.0 +~~END~~ + + +SELECT CAST('2024Apr2 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-02 14:30:00.0 +~~END~~ + + +SELECT CAST('2024Apr 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-01 14:30:00.0 +~~END~~ + + +--- yyyy [dd] mon +SELECT CAST('2024 12 Apr 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-12 14:30:00.0 +~~END~~ + + +SELECT CAST('2024 2 Apr 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-02 14:30:00.0 +~~END~~ + + +SELECT CAST('2024 Apr 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-01 14:30:00.0 +~~END~~ + + +SELECT CAST('2024 12Apr 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-12 14:30:00.0 +~~END~~ + + +SELECT CAST('2024 2Apr 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-02 14:30:00.0 +~~END~~ + + +SELECT CAST('2024Apr 14:30' AS DATETIME) +GO +~~START~~ +datetime +2024-04-01 14:30:00.0 +~~END~~ + + +-- ISO 8601 +select cast('2023-11-27' as datetime) +go +~~START~~ +datetime +2023-11-27 00:00:00.0 +~~END~~ + + +select cast('2023-2-29' as datetime) +go +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: date/time field value out of range: "2023-2-29")~~ + + +select cast('2022-10-30T03:00:00.123' as datetime) +go +~~START~~ +datetime +2022-10-30 03:00:00.123 +~~END~~ + + +select cast('2022-10-30T03:00:00.123-11:11' as datetime) +go +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: invalid input syntax for type datetime: "2022-10-30T03:00:00.123-11:11")~~ + + +SELECT CAST('2022-10-22T13:34:12.123' AS DATETIME) +GO +~~START~~ +datetime +2022-10-22 13:34:12.123 +~~END~~ + + +SELECT CAST('2022-1-22T13:34:12.123' AS DATETIME) +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: invalid input syntax for type datetime: "2022-1-22T13:34:12.123")~~ + + +SELECT CAST('2022-10-2T13:34:12.123' AS DATETIME) +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: invalid input syntax for type datetime: "2022-10-2T13:34:12.123")~~ + + +SELECT CAST('2022-10-22T3:34:12.123' AS DATETIME) +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: invalid input syntax for type datetime: "2022-10-22T3:34:12.123")~~ + + +SELECT CAST('2022-10-22T13:4:12.123' AS DATETIME) +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: invalid input syntax for type datetime: "2022-10-22T13:4:12.123")~~ + + +SELECT CAST('2022-10-22T13:34:1.123' AS DATETIME) +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: invalid input syntax for type datetime: "2022-10-22T13:34:1.123")~~ + + +SELECT CAST('2022-10-22T13:34:12.1' AS DATETIME) +GO +~~START~~ +datetime +2022-10-22 13:34:12.1 +~~END~~ + + +SELECT CAST('2022-10-22T13:34:12.12' AS DATETIME) +GO +~~START~~ +datetime +2022-10-22 13:34:12.12 +~~END~~ + + +SELECT CAST('2022-10-22T13:34:12.123' AS DATETIME) +GO +~~START~~ +datetime +2022-10-22 13:34:12.123 +~~END~~ + + +SELECT CAST('2022-10-22T13:34:12.1234' AS DATETIME) +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: invalid input syntax for type datetime: "2022-10-22T13:34:12.1234")~~ + + +SELECT CAST('2022-10-22T13:34:12.15' AS DATETIME) +GO +~~START~~ +datetime +2022-10-22 13:34:12.15 +~~END~~ + + +-- spaces are not allowed between any two tokens for ISO 8601 +SELECT CAST('2022-10-22T13 :34:12.123' AS DATETIME) +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: invalid input syntax for type datetime: "2022-10-22T13 :34:12.123")~~ + + +SELECT CAST('2022-10 -22T13:34:12.123' AS DATETIME) +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: invalid input syntax for type datetime: "2022-10 -22T13:34:12.123")~~ + + +SELECT CAST('2022-10-22 T 13:34:12.123' AS DATETIME) +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: invalid input syntax for type datetime: "2022-10-22 T 13:34:12.123")~~ + + +-- Unseparated +select cast('20240129' as datetime) +go +~~START~~ +datetime +2024-01-29 00:00:00.0 +~~END~~ + + +select cast('20241329' as datetime) +go +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: date/time field value out of range: "20241329")~~ + + +select cast('240129' as datetime) +go +~~START~~ +datetime +2024-01-29 00:00:00.0 +~~END~~ + + +select cast('241329' as datetime) +go +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: date/time field value out of range: "241329")~~ + + +select cast('2001' as datetime) +go +~~START~~ +datetime +2001-01-01 00:00:00.0 +~~END~~ + + +select cast('0001' as datetime) +go +~~ERROR (Code: 517)~~ + +~~ERROR (Message: data out of range for datetime)~~ + + +SELECT CAST('20240129 03:00:00' AS DATETIME) +GO +~~START~~ +datetime +2024-01-29 03:00:00.0 +~~END~~ + + +SELECT CAST('20241329 03:00:00' AS DATETIME) +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: date/time field value out of range: "20241329 03:00:00")~~ + + +SELECT CAST('240129 03:00' AS DATETIME) +GO +~~START~~ +datetime +2024-01-29 03:00:00.0 +~~END~~ + + +SELECT CAST('241329 03:00' AS DATETIME) +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: date/time field value out of range: "241329 03:00")~~ + + +SELECT CAST('2001 03:00:00.123' AS DATETIME) +GO +~~START~~ +datetime +2001-01-01 03:00:00.123 +~~END~~ + + +SELECT CAST('0001 03:00:00.421' AS DATETIME) +GO +~~ERROR (Code: 517)~~ + +~~ERROR (Message: data out of range for datetime)~~ + + +-- invalid syntax +select cast('0' as datetime) +go +~~ERROR (Code: 33557097)~~ ~~ERROR (Message: invalid input syntax for type datetime: "0")~~ @@ -644,7 +2298,104 @@ GO ~~ERROR (Message: date/time field value out of range: "0000-00-00")~~ --- -- misc +-- boundary tests +SELECT CAST('9999-12-31 23:59:59.999' AS DATETIME) +GO +~~ERROR (Code: 517)~~ + +~~ERROR (Message: data out of range for datetime)~~ + + +SELECT CAST('9999-12-31 23:59:59.998' AS DATETIME) +GO +~~START~~ +datetime +9999-12-31 23:59:59.997 +~~END~~ + + +-- rounding of DATETIME +SELECT CAST('01/01/98 23:59:59.999' AS DATETIME) +GO +~~START~~ +datetime +1998-01-02 00:00:00.0 +~~END~~ + + +SELECT CAST('01/01/98 23:59:59.998' AS DATETIME) +GO +~~START~~ +datetime +1998-01-01 23:59:59.997 +~~END~~ + + +SELECT CAST('01/01/98 23:59:59.997' AS DATETIME) +GO +~~START~~ +datetime +1998-01-01 23:59:59.997 +~~END~~ + + +SELECT CAST('01/01/98 23:59:59.996' AS DATETIME) +GO +~~START~~ +datetime +1998-01-01 23:59:59.997 +~~END~~ + + +SELECT CAST('01/01/98 23:59:59.995' AS DATETIME) +GO +~~START~~ +datetime +1998-01-01 23:59:59.997 +~~END~~ + + +SELECT CAST('01/01/98 23:59:59.994' AS DATETIME) +GO +~~START~~ +datetime +1998-01-01 23:59:59.993 +~~END~~ + + +SELECT CAST('01/01/98 23:59:59.993' AS DATETIME) +GO +~~START~~ +datetime +1998-01-01 23:59:59.993 +~~END~~ + + +SELECT CAST('01/01/98 23:59:59.992' AS DATETIME) +GO +~~START~~ +datetime +1998-01-01 23:59:59.993 +~~END~~ + + +SELECT CAST('01/01/98 23:59:59.991' AS DATETIME) +GO +~~START~~ +datetime +1998-01-01 23:59:59.99 +~~END~~ + + +SELECT CAST('01/01/98 23:59:59.990' AS DATETIME) +GO +~~START~~ +datetime +1998-01-01 23:59:59.99 +~~END~~ + + +-- misc SELECT cast('2022-10-29 20:01:00.000' as datetime) GO ~~START~~ diff --git a/test/JDBC/expected/babel_4328_datetime2-vu-verify.out b/test/JDBC/expected/babel_4328_datetime2-vu-verify.out index 70ca4e977a1..15376eeec3b 100644 --- a/test/JDBC/expected/babel_4328_datetime2-vu-verify.out +++ b/test/JDBC/expected/babel_4328_datetime2-vu-verify.out @@ -1,141 +1,838 @@ --- -- Numeric +SELECT CAST('' AS DATETIME2) +go +~~START~~ +datetime2 +1900-01-01 00:00:00.0000000 +~~END~~ + +-- Numeric select cast('3-2-4 14:30' as datetime2) go ~~START~~ datetime2 -2004-03-02 14:30:00.0000000 +2004-03-02 14:30:00.0000000 +~~END~~ + + +select cast('3-12-4 14:30' as datetime2) +go +~~START~~ +datetime2 +2004-03-12 14:30:00.0000000 +~~END~~ + + +select cast('3-12-24 14:30' as datetime2) +go +~~START~~ +datetime2 +2024-03-12 14:30:00.0000000 +~~END~~ + + +select cast('3-12-2024 14:30' as datetime2) +go +~~START~~ +datetime2 +2024-03-12 14:30:00.0000000 +~~END~~ + + +SELECT CAST('11-12-2024' AS DATETIME2) +go +~~START~~ +datetime2 +2024-11-12 00:00:00.0000000 +~~END~~ + + +select cast('3 - 12 - 2024 14:30' as datetime2) +go +~~START~~ +datetime2 +2024-03-12 14:30:00.0000000 +~~END~~ + + +select cast('3.2.4 14:30' as datetime2) +go +~~START~~ +datetime2 +2004-03-02 14:30:00.0000000 +~~END~~ + + +select cast('3.12.4 14:30' as datetime2) +go +~~START~~ +datetime2 +2004-03-12 14:30:00.0000000 +~~END~~ + + +select cast('3.12.24 14:30' as datetime2) +go +~~START~~ +datetime2 +2024-03-12 14:30:00.0000000 +~~END~~ + + +select cast('3.12.2024 14:30' as datetime2) +go +~~START~~ +datetime2 +2024-03-12 14:30:00.0000000 +~~END~~ + + +SELECT CAST('11.12.2024' AS DATETIME2) +go +~~START~~ +datetime2 +2024-11-12 00:00:00.0000000 +~~END~~ + + +select cast('3 . 12 . 2024 14:30' as datetime2) +go +~~START~~ +datetime2 +2024-03-12 14:30:00.0000000 +~~END~~ + + +select cast('3/2/4 14:30' as datetime2) +go +~~START~~ +datetime2 +2004-03-02 14:30:00.0000000 +~~END~~ + + +select cast('3/12/4 14:30' as datetime2) +go +~~START~~ +datetime2 +2004-03-12 14:30:00.0000000 +~~END~~ + + +select cast('3/12/24 14:30' as datetime2) +go +~~START~~ +datetime2 +2024-03-12 14:30:00.0000000 +~~END~~ + + +select cast('3/12/2024 14:30' as datetime2) +go +~~START~~ +datetime2 +2024-03-12 14:30:00.0000000 +~~END~~ + + +SELECT CAST('11/12/2024' AS DATETIME2) +go +~~START~~ +datetime2 +2024-11-12 00:00:00.0000000 +~~END~~ + + +select cast('3 / 12 / 2024 14:30' as datetime2) +go +~~START~~ +datetime2 +2024-03-12 14:30:00.0000000 +~~END~~ + + +select cast('04-02-03 14:30' as datetime2) +go +~~START~~ +datetime2 +2003-04-02 14:30:00.0000000 +~~END~~ + + +SELECT CAST('3-4-2' AS DATETIME2) +go +~~START~~ +datetime2 +2002-03-04 00:00:00.0000000 +~~END~~ + + +SELECT CAST('3-4-12' AS DATETIME2) +go +~~START~~ +datetime2 +2012-03-04 00:00:00.0000000 +~~END~~ + + +SELECT CAST('3-24-12' AS DATETIME2) +go +~~START~~ +datetime2 +2012-03-24 00:00:00.0000000 +~~END~~ + + +SELECT CAST('3-2024-12' AS DATETIME2) +go +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: date/time field value out of range: "3-2024-12")~~ + + +SELECT CAST('11-2024-12' AS DATETIME2) +go +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: date/time field value out of range: "11-2024-12")~~ + + +SELECT CAST('3 - 2024 - 12' AS DATETIME2) +go +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: date/time field value out of range: "3 - 2024 - 12")~~ + + +SELECT CAST('3.4.2' AS DATETIME2) +go +~~START~~ +datetime2 +2002-03-04 00:00:00.0000000 +~~END~~ + + +SELECT CAST('3.4.12' AS DATETIME2) +go +~~START~~ +datetime2 +2012-03-04 00:00:00.0000000 +~~END~~ + + +SELECT CAST('3.24.12' AS DATETIME2) +go +~~START~~ +datetime2 +2012-03-24 00:00:00.0000000 +~~END~~ + + +SELECT CAST('3.2024.12' AS DATETIME2) +go +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: date/time field value out of range: "3.2024.12")~~ + + +SELECT CAST('11.2024.12' AS DATETIME2) +go +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: date/time field value out of range: "11.2024.12")~~ + + +SELECT CAST('3 . 2024 . 12' AS DATETIME2) +go +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: date/time field value out of range: "3 . 2024 . 12")~~ + + +SELECT CAST('3/4/2' AS DATETIME2) +GO +~~START~~ +datetime2 +2002-03-04 00:00:00.0000000 +~~END~~ + + +SELECT CAST('3/4/12' AS DATETIME2) +GO +~~START~~ +datetime2 +2012-03-04 00:00:00.0000000 +~~END~~ + + +SELECT CAST('3/24/12' AS DATETIME2) +GO +~~START~~ +datetime2 +2012-03-24 00:00:00.0000000 +~~END~~ + + +SELECT CAST('3/2024/12' AS DATETIME2) +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: date/time field value out of range: "3/2024/12")~~ + + +SELECT CAST('11/2024/12' AS DATETIME2) +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: date/time field value out of range: "11/2024/12")~~ + + +SELECT CAST('3 / 2024 / 12' AS DATETIME2) +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: date/time field value out of range: "3 / 2024 / 12")~~ + + +-- [d]d[m]m([y]y|yyyy) +SELECT CAST('2-3-4' AS DATETIME2) +GO +~~START~~ +datetime2 +2004-02-03 00:00:00.0000000 +~~END~~ + + +SELECT CAST('12-3-4' AS DATETIME2) +GO +~~START~~ +datetime2 +2004-12-03 00:00:00.0000000 +~~END~~ + + +SELECT CAST('12-3-24' AS DATETIME2) +GO +~~START~~ +datetime2 +2024-12-03 00:00:00.0000000 +~~END~~ + + +SELECT CAST('12-3-2024' AS DATETIME2) +GO +~~START~~ +datetime2 +2024-12-03 00:00:00.0000000 +~~END~~ + + +SELECT CAST('12-11-2024' AS DATETIME2) +GO +~~START~~ +datetime2 +2024-12-11 00:00:00.0000000 +~~END~~ + + +SELECT CAST('12 - 3 - 2024' AS DATETIME2) +GO +~~START~~ +datetime2 +2024-12-03 00:00:00.0000000 +~~END~~ + + +SELECT CAST('2.3.4' AS DATETIME2) +GO +~~START~~ +datetime2 +2004-02-03 00:00:00.0000000 +~~END~~ + + +SELECT CAST('12.3.4' AS DATETIME2) +GO +~~START~~ +datetime2 +2004-12-03 00:00:00.0000000 +~~END~~ + + +SELECT CAST('12.3.24' AS DATETIME2) +GO +~~START~~ +datetime2 +2024-12-03 00:00:00.0000000 +~~END~~ + + +SELECT CAST('12.3.2024' AS DATETIME2) +GO +~~START~~ +datetime2 +2024-12-03 00:00:00.0000000 +~~END~~ + + +SELECT CAST('12.11.2024' AS DATETIME2) +GO +~~START~~ +datetime2 +2024-12-11 00:00:00.0000000 +~~END~~ + + +SELECT CAST('12 . 3 . 2024' AS DATETIME2) +GO +~~START~~ +datetime2 +2024-12-03 00:00:00.0000000 +~~END~~ + + +SELECT CAST('2/3/4' AS DATETIME2) +GO +~~START~~ +datetime2 +2004-02-03 00:00:00.0000000 +~~END~~ + + +SELECT CAST('12/3/4' AS DATETIME2) +GO +~~START~~ +datetime2 +2004-12-03 00:00:00.0000000 +~~END~~ + + +SELECT CAST('12/3/24' AS DATETIME2) +GO +~~START~~ +datetime2 +2024-12-03 00:00:00.0000000 +~~END~~ + + +SELECT CAST('12/3/2024' AS DATETIME2) +GO +~~START~~ +datetime2 +2024-12-03 00:00:00.0000000 +~~END~~ + + +SELECT CAST('12/11/2024' AS DATETIME2) +GO +~~START~~ +datetime2 +2024-12-11 00:00:00.0000000 +~~END~~ + + +SELECT CAST('12 / 3 / 2024' AS DATETIME2) +GO +~~START~~ +datetime2 +2024-12-03 00:00:00.0000000 +~~END~~ + + +-- [d]d([y]y|yyyy)[m]m +SELECT CAST('2-4-3' AS DATETIME2) +GO +~~START~~ +datetime2 +2003-02-04 00:00:00.0000000 +~~END~~ + + +SELECT CAST('12-4-3' AS DATETIME2) +GO +~~START~~ +datetime2 +2003-12-04 00:00:00.0000000 +~~END~~ + + +SELECT CAST('12-24-3' AS DATETIME2) +GO +~~START~~ +datetime2 +2003-12-24 00:00:00.0000000 +~~END~~ + + +SELECT CAST('12-2024-3' AS DATETIME2) +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: date/time field value out of range: "12-2024-3")~~ + + +SELECT CAST('12-2024-11' AS DATETIME2) +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: date/time field value out of range: "12-2024-11")~~ + + +SELECT CAST('12 - 2024 - 3' AS DATETIME2) +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: date/time field value out of range: "12 - 2024 - 3")~~ + + +SELECT CAST('2.4.3' AS DATETIME2) +GO +~~START~~ +datetime2 +2003-02-04 00:00:00.0000000 +~~END~~ + + +SELECT CAST('12.4.3' AS DATETIME2) +GO +~~START~~ +datetime2 +2003-12-04 00:00:00.0000000 +~~END~~ + + +SELECT CAST('12.24.3' AS DATETIME2) +GO +~~START~~ +datetime2 +2003-12-24 00:00:00.0000000 +~~END~~ + + +SELECT CAST('12.2024.3' AS DATETIME2) +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: date/time field value out of range: "12.2024.3")~~ + + +SELECT CAST('12.2024.11' AS DATETIME2) +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: date/time field value out of range: "12.2024.11")~~ + + +SELECT CAST('12 . 2024 . 3' AS DATETIME2) +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: date/time field value out of range: "12 . 2024 . 3")~~ + + +SELECT CAST('2/4/3' AS DATETIME2) +GO +~~START~~ +datetime2 +2003-02-04 00:00:00.0000000 +~~END~~ + + +SELECT CAST('12/4/3' AS DATETIME2) +GO +~~START~~ +datetime2 +2003-12-04 00:00:00.0000000 +~~END~~ + + +SELECT CAST('12/24/3' AS DATETIME2) +GO +~~START~~ +datetime2 +2003-12-24 00:00:00.0000000 +~~END~~ + + +SELECT CAST('12/2024/3' AS DATETIME2) +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: date/time field value out of range: "12/2024/3")~~ + + +SELECT CAST('12/2024/11' AS DATETIME2) +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: date/time field value out of range: "12/2024/11")~~ + + +SELECT CAST('12 / 2024 / 3' AS DATETIME2) +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: date/time field value out of range: "12 / 2024 / 3")~~ + + +-- ([y]y|yyyy)[m]m[d]d +SELECT CAST('4-3-2' AS DATETIME2) +GO +~~START~~ +datetime2 +2002-04-03 00:00:00.0000000 +~~END~~ + + +SELECT CAST('4-3-12' AS DATETIME2) +GO +~~START~~ +datetime2 +2012-04-03 00:00:00.0000000 +~~END~~ + + +SELECT CAST('24-3-12' AS DATETIME2) +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: date/time field value out of range: "24-3-12")~~ + + +~~START~~ +SELECT CAST('2024-3-12' AS DATETIME2) +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: syntax error near '~' at line 1 and character position 0)~~ + + +SELECT CAST('2024-11-12' AS DATETIME2) +GO +~~START~~ +datetime2 +2024-11-12 00:00:00.0000000 +~~END~~ + + +SELECT CAST('2024 - 3 - 12' AS DATETIME2) +GO +~~START~~ +datetime2 +2024-03-12 00:00:00.0000000 +~~END~~ + + +SELECT CAST('4.3.2' AS DATETIME2) +GO +~~START~~ +datetime2 +2002-04-03 00:00:00.0000000 +~~END~~ + + +SELECT CAST('4.3.12' AS DATETIME2) +GO +~~START~~ +datetime2 +2012-04-03 00:00:00.0000000 +~~END~~ + + +SELECT CAST('24.3.12' AS DATETIME2) +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: date/time field value out of range: "24.3.12")~~ + + +SELECT CAST('2024.3.12' AS DATETIME2) +GO +~~START~~ +datetime2 +2024-03-12 00:00:00.0000000 ~~END~~ -select cast('3-12-4 14:30' as datetime2) -go +SELECT CAST('2024.11.12' AS DATETIME2) +GO ~~START~~ datetime2 -2004-03-12 14:30:00.0000000 +2024-11-12 00:00:00.0000000 ~~END~~ -select cast('3-12-24 14:30' as datetime2) -go +SELECT CAST('2024 . 3 . 12' AS DATETIME2) +GO ~~START~~ datetime2 -2024-03-12 14:30:00.0000000 +2024-03-12 00:00:00.0000000 ~~END~~ -select cast('3-12-2024 14:30' as datetime2) -go +SELECT CAST('4/3/2' AS DATETIME2) +GO ~~START~~ datetime2 -2024-03-12 14:30:00.0000000 +2002-04-03 00:00:00.0000000 ~~END~~ -select cast('3 - 12 - 2024 14:30' as datetime2) -go +SELECT CAST('4/3/12' AS DATETIME2) +GO ~~START~~ datetime2 -2024-03-12 14:30:00.0000000 +2012-04-03 00:00:00.0000000 ~~END~~ -select cast('3.2.4 14:30' as datetime2) -go +SELECT CAST('24/3/12' AS DATETIME2) +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: date/time field value out of range: "24/3/12")~~ + + +SELECT CAST('2024/3/12' AS DATETIME2) +GO ~~START~~ datetime2 -2004-03-02 14:30:00.0000000 +2024-03-12 00:00:00.0000000 ~~END~~ -select cast('3.12.4 14:30' as datetime2) -go +SELECT CAST('2024/11/12' AS DATETIME2) +GO ~~START~~ datetime2 -2004-03-12 14:30:00.0000000 +2024-11-12 00:00:00.0000000 ~~END~~ -select cast('3.12.24 14:30' as datetime2) -go +SELECT CAST('2024 / 3 / 12' AS DATETIME2) +GO ~~START~~ datetime2 -2024-03-12 14:30:00.0000000 +2024-03-12 00:00:00.0000000 ~~END~~ -select cast('3.12.2024 14:30' as datetime2) +-- Boundary values +SELECT CAST('9999-12-30 23:59:59.99999999' AS DATETIME2) go ~~START~~ datetime2 -2024-03-12 14:30:00.0000000 +9999-12-31 00:00:00.0000000 ~~END~~ -select cast('3 . 12 . 2024 14:30' as datetime2) +SELECT CAST('9999-12-30 23:59:59.999999999' AS DATETIME2) go ~~START~~ datetime2 -2024-03-12 14:30:00.0000000 +9999-12-31 00:00:00.0000000 ~~END~~ -select cast('3/2/4 14:30' as datetime2) +SELECT CAST('9999-12-31 23:59:59.99999999' AS DATETIME2) go ~~START~~ datetime2 -2004-03-02 14:30:00.0000000 +9999-12-31 23:59:59.9999990 ~~END~~ -select cast('3/12/4 14:30' as datetime2) +SELECT CAST('9999-12-31 23:59:59.999999999' AS DATETIME2) go ~~START~~ datetime2 -2004-03-12 14:30:00.0000000 +9999-12-31 23:59:59.9999990 ~~END~~ -select cast('3/12/24 14:30' as datetime2) +SELECT CAST('2022-10-00' AS DATETIME2) +go +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: date/time field value out of range: "2022-10-00")~~ + + +SELECT CAST('0000-10-01' AS DATETIME2) +go +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: date/time field value out of range: "0000-10-01")~~ + + +SELECT CAST('2023-00-01' AS DATETIME2) +go +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: date/time field value out of range: "2023-00-01")~~ + + +SELECT CAST('0000-00-00' AS DATETIME2) +go +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: date/time field value out of range: "0000-00-00")~~ + + +SELECT CAST('1752-01-01' AS DATETIME2) go ~~START~~ datetime2 -2024-03-12 14:30:00.0000000 +1752-01-01 00:00:00.0000000 ~~END~~ -select cast('3/12/2024 14:30' as datetime2) +SELECT CAST('1753-01-01' AS DATETIME2) go ~~START~~ datetime2 -2024-03-12 14:30:00.0000000 +1753-01-01 00:00:00.0000000 ~~END~~ -select cast('3 / 12 / 2024 14:30' as datetime2) -go +SELECT CAST('1899-01-01' AS DATETIME2) +GO ~~START~~ datetime2 -2024-03-12 14:30:00.0000000 +1899-01-01 00:00:00.0000000 ~~END~~ -select cast('04-02-03 14:30' as datetime2) -go +SELECT CAST('1900-01-01' AS DATETIME2) +GO ~~START~~ datetime2 -2003-04-02 14:30:00.0000000 +1900-01-01 00:00:00.0000000 ~~END~~ --- invalid syntax -select cast('3#12#2024' as datetime2) -go +SELECT CAST('2079-06-06' AS DATETIME2) +GO ~~START~~ datetime2 -2024-03-12 00:00:00.0000000 +2079-06-06 00:00:00.0000000 +~~END~~ + + +SELECT CAST('2079-06-07' AS DATETIME2) +GO +~~START~~ +datetime2 +2079-06-07 00:00:00.0000000 ~~END~~ +-- invalid syntax +select cast('3#12#2024' as datetime2) +go +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: invalid input syntax for type datetime2: "3#12#2024")~~ + + select cast('3/12.2024' as datetime2) go ~~ERROR (Code: 33557097)~~ @@ -152,6 +849,22 @@ datetime2 ~~END~~ +SELECT CAST('Apr12,2000' AS DATETIME2) +go +~~START~~ +datetime2 +2000-04-12 00:00:00.0000000 +~~END~~ + + +SELECT CAST('Apr12 2000' AS DATETIME2) +go +~~START~~ +datetime2 +2000-04-12 00:00:00.0000000 +~~END~~ + + select cast('Apr 12 2000 14:30' as datetime2) go ~~START~~ @@ -176,6 +889,30 @@ datetime2 ~~END~~ +SELECT CAST('Apr1,2000' AS DATETIME2) +go +~~START~~ +datetime2 +2000-04-01 00:00:00.0000000 +~~END~~ + + +SELECT CAST('Apr1 2000' AS DATETIME2) +go +~~START~~ +datetime2 +2000-04-01 00:00:00.0000000 +~~END~~ + + +SELECT CAST('Apr,2000' AS DATETIME2) +go +~~START~~ +datetime2 +2000-04-01 00:00:00.0000000 +~~END~~ + + select cast('Apr 2000 14:30' as datetime2) go ~~START~~ @@ -543,6 +1280,69 @@ go ~~ERROR (Message: invalid input syntax for type datetime2: "2024, 12 Apr 14:30")~~ +SELECT CAST('Apr12,' AS DATETIME2) +go +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: invalid input syntax for type datetime2: "Apr12,")~~ + + +SELECT CAST('Apr12' AS DATETIME2) +go +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: invalid input syntax for type datetime2: "Apr12")~~ + + +SELECT CAST('Apr1,' AS DATETIME2) +go +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: invalid input syntax for type datetime2: "Apr1,")~~ + + +SELECT CAST('Apr1' AS DATETIME2) +go +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: invalid input syntax for type datetime2: "Apr1")~~ + + +SELECT CAST('12 Apr,' AS DATETIME2) +go +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: invalid input syntax for type datetime2: "12 Apr,")~~ + + +SELECT CAST('12 Apr' AS DATETIME2) +go +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: invalid input syntax for type datetime2: "12 Apr")~~ + + +SELECT CAST('12Apr,' AS DATETIME2) +go +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: invalid input syntax for type datetime2: "12Apr,")~~ + + +SELECT CAST('12Apr' AS DATETIME2) +go +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: invalid input syntax for type datetime2: "12Apr")~~ + + +SELECT CAST('2023-2-29' AS DATETIME2) +go +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: date/time field value out of range: "2023-2-29")~~ + + -- ISO 8601 select cast('2023-11-27' as datetime2) go @@ -620,6 +1420,59 @@ GO ~~ERROR (Message: invalid input syntax for type datetime2: "2022-10-30T03:00:00:12345")~~ +SELECT CAST('2022-10-22T13:34:12.123456789' AS DATETIME2) +go +~~START~~ +datetime2 +2022-10-22 13:34:12.1234570 +~~END~~ + + +SELECT CAST('2022-10-22T13:34:12.12345678' AS DATETIME2) +go +~~START~~ +datetime2 +2022-10-22 13:34:12.1234570 +~~END~~ + + +SELECT CAST('2022-10-22T13:34:12.1234567' AS DATETIME2) +go +~~START~~ +datetime2 +2022-10-22 13:34:12.1234570 +~~END~~ + + +-- spaces are not allowed between any two tokens for ISO 8601 +SELECT CAST('2022-10-22T13 :34:12.123' AS DATETIME2) +go +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: invalid input syntax for type datetime2: "2022-10-22T13 :34:12.123")~~ + + +SELECT CAST('2022-10-22 T 13:34:12.123' AS DATETIME2) +go +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: invalid input syntax for type datetime2: "2022-10-22 T 13:34:12.123")~~ + + +SELECT CAST('2022-10-22T13:34:12.123 Z' AS DATETIME2) +go +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: invalid input syntax for type datetime2: "2022-10-22T13:34:12.123 Z")~~ + + +SELECT CAST('2022-10-22T13:34:12.123 -11:11' AS DATETIME2) +go +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: invalid input syntax for type datetime2: "2022-10-22T13:34:12.123 -11:11")~~ + + -- Unseparated select cast('20240129' as datetime2) go @@ -899,6 +1752,57 @@ GO ~~ERROR (Message: date/time field value out of range: "0000-00-00 23:59:59.990")~~ +-- DATETIME2 with typmod +SELECT CAST('01/01/98 23:59:56.501' AS DATETIME2(0)) +go +~~START~~ +datetime2 +1998-01-01 23:59:57 +~~END~~ + + +SELECT CAST('01/01/98 23:59:56.500' AS DATETIME2(0)) +go +~~START~~ +datetime2 +1998-01-01 23:59:57 +~~END~~ + + +SELECT CAST('01/01/98 23:59:56.499' AS DATETIME2(1)) +go +~~START~~ +datetime2 +1998-01-01 23:59:56.5 +~~END~~ + + +SELECT CAST('01/01/98 23:59:59.123' AS DATETIME2(1)) +go +~~START~~ +datetime2 +1998-01-01 23:59:59.1 +~~END~~ + + +SELECT CAST('01/01/98 23:59:59.123' AS DATETIME2(2)) +go +~~START~~ +datetime2 +1998-01-01 23:59:59.12 +~~END~~ + + +SELECT CAST('01/01/98 23:59:59.123' AS DATETIME2(3)) +go +~~START~~ +datetime2 +1998-01-01 23:59:59.123 +~~END~~ + + + + --- misc SELECT cast('02001-04-22 16:23:51' as datetime2) GO @@ -929,6 +1833,15 @@ go ~~ERROR (Message: invalid input syntax for type datetime: "16 apr 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")~~ +DECLARE @TM_ICLO TIME = '17:24:07.1766670' +SELECT CAST(@TM_ICLO AS DATETIME2) +GO +~~START~~ +datetime2 +1900-01-01 17:24:07.1766670 +~~END~~ + + select * from babel_4328_datetime2_v1 go ~~START~~ diff --git a/test/JDBC/input/babel_4328_datetime-vu-verify.sql b/test/JDBC/input/babel_4328_datetime-vu-verify.sql index 75d6d39069e..502e78b8fd9 100644 --- a/test/JDBC/input/babel_4328_datetime-vu-verify.sql +++ b/test/JDBC/input/babel_4328_datetime-vu-verify.sql @@ -1,3 +1,6 @@ +SELECT CAST('' AS DATETIME) +go + -- DATE -- -- Numeric: [m]m[d]d([y]y|yyyy) select cast('3-2-4' as datetime) @@ -48,6 +51,297 @@ go select cast('04-02-03' as datetime) go +SELECT CAST('3-2-4 14:30' AS DATETIME) +GO + +SELECT CAST('3-12-4 14:30' AS DATETIME) +GO + +SELECT CAST('3-12-24 14:30' AS DATETIME) +GO + +SELECT CAST('3-12-2024 14:30' AS DATETIME) +GO + +SELECT CAST('11-12-2024 14:30' AS DATETIME) +GO + +SELECT CAST('3 - 12 - 2024 14:30' AS DATETIME) +GO + +SELECT CAST('3.2.4 14:30' AS DATETIME) +GO + +SELECT CAST('3.12.4 14:30' AS DATETIME) +GO + +SELECT CAST('3.12.24 14:30' AS DATETIME) +GO + +SELECT CAST('3.12.2024 14:30' AS DATETIME) +GO + +SELECT CAST('11.12.2024 14:30' AS DATETIME) +GO + +SELECT CAST('3 . 12 . 2024 14:30' AS DATETIME) +GO + +SELECT CAST('3/2/4 14:30' AS DATETIME) +GO + +SELECT CAST('3/12/4 14:30' AS DATETIME) +GO + +SELECT CAST('3/12/24 14:30' AS DATETIME) +GO + +SELECT CAST('3/12/2024 14:30' AS DATETIME) +GO + +SELECT CAST('11/12/2024 14:30' AS DATETIME) +GO + +SELECT CAST('3 / 12 / 2024 14:30' AS DATETIME) +GO + +-- [m]m([y]y|yyyy)[d]d +SELECT CAST('3-4-2 14:30' AS DATETIME) +GO + +SELECT CAST('3-4-12 14:30' AS DATETIME) +GO + +SELECT CAST('3-24-12 14:30' AS DATETIME) +GO + +SELECT CAST('3-2024-12 14:30' AS DATETIME) +GO + +SELECT CAST('11-2024-12 14:30' AS DATETIME) +GO + +SELECT CAST('3 - 2024 - 12 14:30' AS DATETIME) +GO + +SELECT CAST('3.4.2 14:30' AS DATETIME) +GO + +SELECT CAST('3.4.12 14:30' AS DATETIME) +GO + +SELECT CAST('3.24.12 14:30' AS DATETIME) +GO + +SELECT CAST('3.2024.12 14:30' AS DATETIME) +GO + +SELECT CAST('11.2024.12 14:30' AS DATETIME) +GO + +SELECT CAST('3 . 2024 . 12 14:30' AS DATETIME) +GO + +SELECT CAST('3/4/2 14:30' AS DATETIME) +GO + +SELECT CAST('3/4/12 14:30' AS DATETIME) +GO + +SELECT CAST('3/24/12 14:30' AS DATETIME) +GO + +SELECT CAST('3/2024/12 14:30' AS DATETIME) +GO + +SELECT CAST('11/2024/12 14:30' AS DATETIME) +GO + +SELECT CAST('3 / 2024 / 12 14:30' AS DATETIME) +GO + +-- [d]d[m]m([y]y|yyyy) +SELECT CAST('2-3-4 14:30' AS DATETIME) +GO + +SELECT CAST('12-3-4 14:30' AS DATETIME) +GO + +SELECT CAST('12-3-24 14:30' AS DATETIME) +GO + +SELECT CAST('12-3-2024 14:30' AS DATETIME) +GO + +SELECT CAST('12-11-2024 14:30' AS DATETIME) +GO + +SELECT CAST('12 - 3 - 2024 14:30' AS DATETIME) +GO + +SELECT CAST('2.3.4 14:30' AS DATETIME) +GO + +SELECT CAST('12.3.4 14:30' AS DATETIME) +GO + +SELECT CAST('12.3.24 14:30' AS DATETIME) +GO + +SELECT CAST('12.3.2024 14:30' AS DATETIME) +GO + +SELECT CAST('12.11.2024 14:30' AS DATETIME) +GO + +SELECT CAST('12 . 3 . 2024 14:30' AS DATETIME) +GO + +SELECT CAST('2/3/4 14:30' AS DATETIME) +GO + +SELECT CAST('12/3/4 14:30' AS DATETIME) +GO + +SELECT CAST('12/3/24 14:30' AS DATETIME) +GO + +SELECT CAST('12/3/2024 14:30' AS DATETIME) +GO + +SELECT CAST('12/11/2024 14:30' AS DATETIME) +GO + +SELECT CAST('12 / 3 / 2024 14:30' AS DATETIME) +GO + +-- [d]d([y]y|yyyy)[m]m +SELECT CAST('2-4-3 14:30' AS DATETIME) +GO + +SELECT CAST('12-4-3 14:30' AS DATETIME) +GO + +SELECT CAST('12-24-3 14:30' AS DATETIME) +GO + +SELECT CAST('12-2024-3 14:30' AS DATETIME) +GO + +SELECT CAST('12-2024-11 14:30' AS DATETIME) +GO + +SELECT CAST('12 - 2024 - 3 14:30' AS DATETIME) +GO + +SELECT CAST('2.4.3 14:30' AS DATETIME) +GO + +SELECT CAST('12.4.3 14:30' AS DATETIME) +GO + +SELECT CAST('12.24.3 14:30' AS DATETIME) +GO + +SELECT CAST('12.2024.3 14:30' AS DATETIME) +GO + +SELECT CAST('12.2024.11 14:30' AS DATETIME) +GO + +SELECT CAST('12 . 2024 . 3 14:30' AS DATETIME) +GO + +SELECT CAST('2/4/3 14:30' AS DATETIME) +GO + +SELECT CAST('12/4/3 14:30' AS DATETIME) +GO + +SELECT CAST('12/24/3 14:30' AS DATETIME) +GO + +SELECT CAST('12/2024/3 14:30' AS DATETIME) +GO + +SELECT CAST('12/2024/11 14:30' AS DATETIME) +GO + +SELECT CAST('12 / 2024 / 3 14:30' AS DATETIME) +GO + +-- ([y]y|yyyy)[m]m[d]d +SELECT CAST('4-3-2 14:30' AS DATETIME) +GO + +SELECT CAST('4-3-12 14:30' AS DATETIME) +GO + +SELECT CAST('24-3-12 14:30' AS DATETIME) +GO + +SELECT CAST('2024-3-12 14:30' AS DATETIME) +GO + +SELECT CAST('2024-11-12 14:30' AS DATETIME) +GO + +SELECT CAST('2024 - 3 - 12 14:30' AS DATETIME) +GO + +SELECT CAST('4.3.2 14:30' AS DATETIME) +GO + +SELECT CAST('4.3.12 14:30' AS DATETIME) +GO + +SELECT CAST('24.3.12 14:30' AS DATETIME) +GO + +SELECT CAST('2024.3.12 14:30' AS DATETIME) +GO + +SELECT CAST('2024.11.12 14:30' AS DATETIME) +GO + +SELECT CAST('2024 . 3 . 12 14:30' AS DATETIME) +GO + +SELECT CAST('4/3/2 14:30' AS DATETIME) +GO + +SELECT CAST('4/3/12 14:30' AS DATETIME) +GO + +SELECT CAST('24/3/12 14:30' AS DATETIME) +GO + +SELECT CAST('2024/3/12 14:30' AS DATETIME) +GO + +SELECT CAST('2024/11/12 14:30' AS DATETIME) +GO + +SELECT CAST('2024 / 3 / 12 14:30' AS DATETIME) +GO + +-- combination of different seperator also works for DATETIME +SELECT CAST('2024/11-12 14:30' AS DATETIME) +GO + +SELECT CAST('2024-11/12 14:30' AS DATETIME) +GO + +SELECT CAST('2024.11/12 14:30' AS DATETIME) +GO + +SELECT CAST('2024.11-12 14:30' AS DATETIME) +GO + +-- invalid syntax +SELECT CAST('3 12 2024' AS DATETIME) +GO + -- invalid syntax select cast('3#12#2024' as datetime) go @@ -158,6 +452,292 @@ go select cast('2024 Apr 12' as datetime) go +--- mon [dd][,] yyyy +SELECT CAST('Apr 12,2000 14:30' AS DATETIME) +GO + +SELECT CAST('Apr 12 2000 14:30' AS DATETIME) +GO + +SELECT CAST('Apr 1,2000 14:30' AS DATETIME) +GO + +SELECT CAST('Apr 1 2000 14:30' AS DATETIME) +GO + +SELECT CAST('Apr,2000 14:30' AS DATETIME) +GO + +SELECT CAST('Apr 2000 14:30' AS DATETIME) +GO + +SELECT CAST('Apr12,2000 14:30' AS DATETIME) +GO + +SELECT CAST('Apr12 2000 14:30' AS DATETIME) +GO + + +SELECT CAST('Apr1,2000 14:30' AS DATETIME) +GO + +SELECT CAST('Apr1 2000 14:30' AS DATETIME) +GO + +SELECT CAST('Apr,2000 14:30' AS DATETIME) +GO + +SELECT CAST('Apr2000 14:30' AS DATETIME) +GO + +--- mon [d]d[,] [yy] +SELECT CAST('Apr 12, 24 14:30' AS DATETIME) +GO + +SELECT CAST('Apr 12 24 14:30' AS DATETIME) +GO + +SELECT CAST('Apr 12, 4 14:30' AS DATETIME) +GO + +SELECT CAST('Apr 12 4 14:30' AS DATETIME) +GO + +SELECT CAST('Apr 12, 14:30' AS DATETIME) +GO + +SELECT CAST('Apr 12 14:30' AS DATETIME) +GO + +SELECT CAST('Apr 1, 24 14:30' AS DATETIME) +GO + +SELECT CAST('Apr 1 24 14:30' AS DATETIME) +GO + +SELECT CAST('Apr 1, 4 14:30' AS DATETIME) +GO + +SELECT CAST('Apr 1 4 14:30' AS DATETIME) +GO + +SELECT CAST('Apr 1, 14:30' AS DATETIME) +GO + +SELECT CAST('Apr 1 14:30' AS DATETIME) +GO + +SELECT CAST('Apr12, 24 14:30' AS DATETIME) +GO + +SELECT CAST('Apr12 24 14:30' AS DATETIME) +GO + +SELECT CAST('Apr12, 4 14:30' AS DATETIME) +GO + +SELECT CAST('Apr12 4 14:30' AS DATETIME) +GO + +SELECT CAST('Apr12, 14:30' AS DATETIME) +GO + +SELECT CAST('Apr12 14:30' AS DATETIME) +GO + +SELECT CAST('Apr1, 24 14:30' AS DATETIME) +GO + +SELECT CAST('Apr1 24 14:30' AS DATETIME) +GO + +SELECT CAST('Apr1, 4 14:30' AS DATETIME) +GO + +SELECT CAST('Apr1 4 14:30' AS DATETIME) +GO + +SELECT CAST('Apr1, 14:30' AS DATETIME) +GO + +SELECT CAST('Apr1 14:30' AS DATETIME) +GO + +--- mon yyyy [dd] +SELECT CAST('Apr 2024 22 14:30' AS DATETIME) +GO + +SELECT CAST('Apr 2024 2 14:30' AS DATETIME) +GO + +SELECT CAST('Apr 2024 14:30' AS DATETIME) +GO + +SELECT CAST('Apr2024 22 14:30' AS DATETIME) +GO + +SELECT CAST('Apr2024 2 14:30' AS DATETIME) +GO + +SELECT CAST('Apr2024 14:30' AS DATETIME) +GO + +--- [dd] mon[,] yyyy +SELECT CAST('24 Apr, 2024 14:30' AS DATETIME) +GO + +SELECT CAST('24 Apr 2024 14:30' AS DATETIME) +GO + +SELECT CAST('4 Apr, 2024 14:30' AS DATETIME) +GO + +SELECT CAST('4 Apr 2024 14:30' AS DATETIME) +GO + +SELECT CAST('Apr, 2024 14:30' AS DATETIME) +GO + +SELECT CAST('Apr 2024 14:30' AS DATETIME) +GO + +SELECT CAST('24Apr, 2024 14:30' AS DATETIME) +GO + +SELECT CAST('24Apr2024 14:30' AS DATETIME) +GO + +SELECT CAST('4Apr, 2024 14:30' AS DATETIME) +GO + +SELECT CAST('4Apr2024 14:30' AS DATETIME) +GO + +SELECT CAST('Apr, 2024 14:30' AS DATETIME) +GO + +SELECT CAST('Apr2024 14:30' AS DATETIME) +GO + +--- dd mon[,][yy]yy +SELECT CAST('12 Apr, 2024 14:30' AS DATETIME) +GO + +SELECT CAST('12 Apr 2024 14:30' AS DATETIME) +GO + +SELECT CAST('12 Apr, 24 14:30' AS DATETIME) +GO + +SELECT CAST('12 Apr 24 14:30' AS DATETIME) +GO + +SELECT CAST('12 Apr, 4 14:30' AS DATETIME) +GO + +SELECT CAST('12 Apr 4 14:30' AS DATETIME) +GO + +SELECT CAST('12 Apr, 14:30' AS DATETIME) +GO + +SELECT CAST('12 Apr 14:30' AS DATETIME) +GO + +SELECT CAST('12Apr, 2024 14:30' AS DATETIME) +GO + +SELECT CAST('12Apr2024 14:30' AS DATETIME) +GO + +SELECT CAST('12Apr, 24 14:30' AS DATETIME) +GO + +SELECT CAST('12Apr24 14:30' AS DATETIME) +GO + +SELECT CAST('12Apr, 4 14:30' AS DATETIME) +GO + +SELECT CAST('12Apr4 14:30' AS DATETIME) +GO + +SELECT CAST('12Apr, 14:30' AS DATETIME) +GO + +SELECT CAST('12Apr 14:30' AS DATETIME) +GO + +--- dd [yy]yy mon +SELECT CAST('12 2024 Apr 14:30' AS DATETIME) +GO + +SELECT CAST('12 24 Apr 14:30' AS DATETIME) +GO + +SELECT CAST('12 2024Apr 14:30' AS DATETIME) +GO + +SELECT CAST('12 24Apr 14:30' AS DATETIME) +GO + +--- [dd] yyyy mon +SELECT CAST('12 2024 Apr 14:30' AS DATETIME) +GO + +SELECT CAST('2 2024 Apr 14:30' AS DATETIME) +GO + +SELECT CAST('2024 Apr 14:30' AS DATETIME) +GO + +SELECT CAST('12 2024Apr 14:30' AS DATETIME) +GO + +SELECT CAST('2 2024Apr 14:30' AS DATETIME) +GO + +SELECT CAST('2024Apr 14:30' AS DATETIME) +GO + +--- yyyy mon [dd] +SELECT CAST('2024 Apr 12 14:30' AS DATETIME) +GO + +SELECT CAST('2024 Apr 2 14:30' AS DATETIME) +GO + +SELECT CAST('2024 Apr 14:30' AS DATETIME) +GO + +SELECT CAST('2024Apr12 14:30' AS DATETIME) +GO + +SELECT CAST('2024Apr2 14:30' AS DATETIME) +GO + +SELECT CAST('2024Apr 14:30' AS DATETIME) +GO + +--- yyyy [dd] mon +SELECT CAST('2024 12 Apr 14:30' AS DATETIME) +GO + +SELECT CAST('2024 2 Apr 14:30' AS DATETIME) +GO + +SELECT CAST('2024 Apr 14:30' AS DATETIME) +GO + +SELECT CAST('2024 12Apr 14:30' AS DATETIME) +GO + +SELECT CAST('2024 2Apr 14:30' AS DATETIME) +GO + +SELECT CAST('2024Apr 14:30' AS DATETIME) +GO + -- ISO 8601 select cast('2023-11-27' as datetime) go @@ -171,6 +751,49 @@ go select cast('2022-10-30T03:00:00.123-11:11' as datetime) go +SELECT CAST('2022-10-22T13:34:12.123' AS DATETIME) +GO + +SELECT CAST('2022-1-22T13:34:12.123' AS DATETIME) +GO + +SELECT CAST('2022-10-2T13:34:12.123' AS DATETIME) +GO + +SELECT CAST('2022-10-22T3:34:12.123' AS DATETIME) +GO + +SELECT CAST('2022-10-22T13:4:12.123' AS DATETIME) +GO + +SELECT CAST('2022-10-22T13:34:1.123' AS DATETIME) +GO + +SELECT CAST('2022-10-22T13:34:12.1' AS DATETIME) +GO + +SELECT CAST('2022-10-22T13:34:12.12' AS DATETIME) +GO + +SELECT CAST('2022-10-22T13:34:12.123' AS DATETIME) +GO + +SELECT CAST('2022-10-22T13:34:12.1234' AS DATETIME) +GO + +SELECT CAST('2022-10-22T13:34:12.15' AS DATETIME) +GO + +-- spaces are not allowed between any two tokens for ISO 8601 +SELECT CAST('2022-10-22T13 :34:12.123' AS DATETIME) +GO + +SELECT CAST('2022-10 -22T13:34:12.123' AS DATETIME) +GO + +SELECT CAST('2022-10-22 T 13:34:12.123' AS DATETIME) +GO + -- Unseparated select cast('20240129' as datetime) go @@ -190,7 +813,25 @@ go select cast('0001' as datetime) go --- -- invalid syntax +SELECT CAST('20240129 03:00:00' AS DATETIME) +GO + +SELECT CAST('20241329 03:00:00' AS DATETIME) +GO + +SELECT CAST('240129 03:00' AS DATETIME) +GO + +SELECT CAST('241329 03:00' AS DATETIME) +GO + +SELECT CAST('2001 03:00:00.123' AS DATETIME) +GO + +SELECT CAST('0001 03:00:00.421' AS DATETIME) +GO + +-- invalid syntax select cast('0' as datetime) go @@ -257,7 +898,45 @@ GO SELECT cast('0000-00-00' as datetime) GO --- -- misc +-- boundary tests +SELECT CAST('9999-12-31 23:59:59.999' AS DATETIME) +GO + +SELECT CAST('9999-12-31 23:59:59.998' AS DATETIME) +GO + +-- rounding of DATETIME +SELECT CAST('01/01/98 23:59:59.999' AS DATETIME) +GO + +SELECT CAST('01/01/98 23:59:59.998' AS DATETIME) +GO + +SELECT CAST('01/01/98 23:59:59.997' AS DATETIME) +GO + +SELECT CAST('01/01/98 23:59:59.996' AS DATETIME) +GO + +SELECT CAST('01/01/98 23:59:59.995' AS DATETIME) +GO + +SELECT CAST('01/01/98 23:59:59.994' AS DATETIME) +GO + +SELECT CAST('01/01/98 23:59:59.993' AS DATETIME) +GO + +SELECT CAST('01/01/98 23:59:59.992' AS DATETIME) +GO + +SELECT CAST('01/01/98 23:59:59.991' AS DATETIME) +GO + +SELECT CAST('01/01/98 23:59:59.990' AS DATETIME) +GO + +-- misc SELECT cast('2022-10-29 20:01:00.000' as datetime) GO diff --git a/test/JDBC/input/babel_4328_datetime2-vu-verify.sql b/test/JDBC/input/babel_4328_datetime2-vu-verify.sql index 0b79216b1a7..45b0edc617b 100644 --- a/test/JDBC/input/babel_4328_datetime2-vu-verify.sql +++ b/test/JDBC/input/babel_4328_datetime2-vu-verify.sql @@ -1,4 +1,6 @@ --- -- Numeric +SELECT CAST('' AS DATETIME2) +go +-- Numeric select cast('3-2-4 14:30' as datetime2) go @@ -11,6 +13,9 @@ go select cast('3-12-2024 14:30' as datetime2) go +SELECT CAST('11-12-2024' AS DATETIME2) +go + select cast('3 - 12 - 2024 14:30' as datetime2) go @@ -26,6 +31,9 @@ go select cast('3.12.2024 14:30' as datetime2) go +SELECT CAST('11.12.2024' AS DATETIME2) +go + select cast('3 . 12 . 2024 14:30' as datetime2) go @@ -41,12 +49,278 @@ go select cast('3/12/2024 14:30' as datetime2) go +SELECT CAST('11/12/2024' AS DATETIME2) +go + select cast('3 / 12 / 2024 14:30' as datetime2) go select cast('04-02-03 14:30' as datetime2) go +SELECT CAST('3-4-2' AS DATETIME2) +go + +SELECT CAST('3-4-12' AS DATETIME2) +go + +SELECT CAST('3-24-12' AS DATETIME2) +go + +SELECT CAST('3-2024-12' AS DATETIME2) +go + +SELECT CAST('11-2024-12' AS DATETIME2) +go + +SELECT CAST('3 - 2024 - 12' AS DATETIME2) +go + +SELECT CAST('3.4.2' AS DATETIME2) +go + +SELECT CAST('3.4.12' AS DATETIME2) +go + +SELECT CAST('3.24.12' AS DATETIME2) +go + +SELECT CAST('3.2024.12' AS DATETIME2) +go + +SELECT CAST('11.2024.12' AS DATETIME2) +go + +SELECT CAST('3 . 2024 . 12' AS DATETIME2) +go + +SELECT CAST('3/4/2' AS DATETIME2) +GO + +SELECT CAST('3/4/12' AS DATETIME2) +GO + +SELECT CAST('3/24/12' AS DATETIME2) +GO + +SELECT CAST('3/2024/12' AS DATETIME2) +GO + +SELECT CAST('11/2024/12' AS DATETIME2) +GO + +SELECT CAST('3 / 2024 / 12' AS DATETIME2) +GO + +-- [d]d[m]m([y]y|yyyy) +SELECT CAST('2-3-4' AS DATETIME2) +GO + +SELECT CAST('12-3-4' AS DATETIME2) +GO + +SELECT CAST('12-3-24' AS DATETIME2) +GO + +SELECT CAST('12-3-2024' AS DATETIME2) +GO + +SELECT CAST('12-11-2024' AS DATETIME2) +GO + +SELECT CAST('12 - 3 - 2024' AS DATETIME2) +GO + +SELECT CAST('2.3.4' AS DATETIME2) +GO + +SELECT CAST('12.3.4' AS DATETIME2) +GO + +SELECT CAST('12.3.24' AS DATETIME2) +GO + +SELECT CAST('12.3.2024' AS DATETIME2) +GO + +SELECT CAST('12.11.2024' AS DATETIME2) +GO + +SELECT CAST('12 . 3 . 2024' AS DATETIME2) +GO + +SELECT CAST('2/3/4' AS DATETIME2) +GO + +SELECT CAST('12/3/4' AS DATETIME2) +GO + +SELECT CAST('12/3/24' AS DATETIME2) +GO + +SELECT CAST('12/3/2024' AS DATETIME2) +GO + +SELECT CAST('12/11/2024' AS DATETIME2) +GO + +SELECT CAST('12 / 3 / 2024' AS DATETIME2) +GO + +-- [d]d([y]y|yyyy)[m]m +SELECT CAST('2-4-3' AS DATETIME2) +GO + +SELECT CAST('12-4-3' AS DATETIME2) +GO + +SELECT CAST('12-24-3' AS DATETIME2) +GO + +SELECT CAST('12-2024-3' AS DATETIME2) +GO + +SELECT CAST('12-2024-11' AS DATETIME2) +GO + +SELECT CAST('12 - 2024 - 3' AS DATETIME2) +GO + +SELECT CAST('2.4.3' AS DATETIME2) +GO + +SELECT CAST('12.4.3' AS DATETIME2) +GO + +SELECT CAST('12.24.3' AS DATETIME2) +GO + +SELECT CAST('12.2024.3' AS DATETIME2) +GO + +SELECT CAST('12.2024.11' AS DATETIME2) +GO + +SELECT CAST('12 . 2024 . 3' AS DATETIME2) +GO + +SELECT CAST('2/4/3' AS DATETIME2) +GO + +SELECT CAST('12/4/3' AS DATETIME2) +GO + +SELECT CAST('12/24/3' AS DATETIME2) +GO + +SELECT CAST('12/2024/3' AS DATETIME2) +GO + +SELECT CAST('12/2024/11' AS DATETIME2) +GO + +SELECT CAST('12 / 2024 / 3' AS DATETIME2) +GO + +-- ([y]y|yyyy)[m]m[d]d +SELECT CAST('4-3-2' AS DATETIME2) +GO + +SELECT CAST('4-3-12' AS DATETIME2) +GO + +SELECT CAST('24-3-12' AS DATETIME2) +GO +~~START~~ + +SELECT CAST('2024-3-12' AS DATETIME2) +GO + +SELECT CAST('2024-11-12' AS DATETIME2) +GO + +SELECT CAST('2024 - 3 - 12' AS DATETIME2) +GO + +SELECT CAST('4.3.2' AS DATETIME2) +GO + +SELECT CAST('4.3.12' AS DATETIME2) +GO + +SELECT CAST('24.3.12' AS DATETIME2) +GO + +SELECT CAST('2024.3.12' AS DATETIME2) +GO + +SELECT CAST('2024.11.12' AS DATETIME2) +GO + +SELECT CAST('2024 . 3 . 12' AS DATETIME2) +GO + +SELECT CAST('4/3/2' AS DATETIME2) +GO + +SELECT CAST('4/3/12' AS DATETIME2) +GO + +SELECT CAST('24/3/12' AS DATETIME2) +GO + +SELECT CAST('2024/3/12' AS DATETIME2) +GO + +SELECT CAST('2024/11/12' AS DATETIME2) +GO + +SELECT CAST('2024 / 3 / 12' AS DATETIME2) +GO + +-- Boundary values +SELECT CAST('9999-12-30 23:59:59.99999999' AS DATETIME2) +go + +SELECT CAST('9999-12-30 23:59:59.999999999' AS DATETIME2) +go + +SELECT CAST('9999-12-31 23:59:59.99999999' AS DATETIME2) +go + +SELECT CAST('9999-12-31 23:59:59.999999999' AS DATETIME2) +go + +SELECT CAST('2022-10-00' AS DATETIME2) +go + +SELECT CAST('0000-10-01' AS DATETIME2) +go + +SELECT CAST('2023-00-01' AS DATETIME2) +go + +SELECT CAST('0000-00-00' AS DATETIME2) +go + +SELECT CAST('1752-01-01' AS DATETIME2) +go + +SELECT CAST('1753-01-01' AS DATETIME2) +go + +SELECT CAST('1899-01-01' AS DATETIME2) +GO + +SELECT CAST('1900-01-01' AS DATETIME2) +GO + +SELECT CAST('2079-06-06' AS DATETIME2) +GO + +SELECT CAST('2079-06-07' AS DATETIME2) +GO + -- invalid syntax select cast('3#12#2024' as datetime2) go @@ -58,6 +332,12 @@ go select cast('Apr 12,2000 14:30' as datetime2) go +SELECT CAST('Apr12,2000' AS DATETIME2) +go + +SELECT CAST('Apr12 2000' AS DATETIME2) +go + select cast('Apr 12 2000 14:30' as datetime2) go @@ -67,6 +347,15 @@ go select cast('Apr 1,2000 14:30' as datetime2) go +SELECT CAST('Apr1,2000' AS DATETIME2) +go + +SELECT CAST('Apr1 2000' AS DATETIME2) +go + +SELECT CAST('Apr,2000' AS DATETIME2) +go + select cast('Apr 2000 14:30' as datetime2) go @@ -211,6 +500,33 @@ go select cast('2024, 12 Apr 14:30' as datetime2) go +SELECT CAST('Apr12,' AS DATETIME2) +go + +SELECT CAST('Apr12' AS DATETIME2) +go + +SELECT CAST('Apr1,' AS DATETIME2) +go + +SELECT CAST('Apr1' AS DATETIME2) +go + +SELECT CAST('12 Apr,' AS DATETIME2) +go + +SELECT CAST('12 Apr' AS DATETIME2) +go + +SELECT CAST('12Apr,' AS DATETIME2) +go + +SELECT CAST('12Apr' AS DATETIME2) +go + +SELECT CAST('2023-2-29' AS DATETIME2) +go + -- ISO 8601 select cast('2023-11-27' as datetime2) go @@ -242,6 +558,28 @@ GO SELECT cast('2022-10-30T03:00:00:12345' as datetime2) GO +SELECT CAST('2022-10-22T13:34:12.123456789' AS DATETIME2) +go + +SELECT CAST('2022-10-22T13:34:12.12345678' AS DATETIME2) +go + +SELECT CAST('2022-10-22T13:34:12.1234567' AS DATETIME2) +go + +-- spaces are not allowed between any two tokens for ISO 8601 +SELECT CAST('2022-10-22T13 :34:12.123' AS DATETIME2) +go + +SELECT CAST('2022-10-22 T 13:34:12.123' AS DATETIME2) +go + +SELECT CAST('2022-10-22T13:34:12.123 Z' AS DATETIME2) +go + +SELECT CAST('2022-10-22T13:34:12.123 -11:11' AS DATETIME2) +go + -- Unseparated select cast('20240129' as datetime2) go @@ -355,6 +693,27 @@ GO SELECT cast('0000-00-00 23:59:59.990' as datetime2) GO +-- DATETIME2 with typmod +SELECT CAST('01/01/98 23:59:56.501' AS DATETIME2(0)) +go + +SELECT CAST('01/01/98 23:59:56.500' AS DATETIME2(0)) +go + +SELECT CAST('01/01/98 23:59:56.499' AS DATETIME2(1)) +go + +SELECT CAST('01/01/98 23:59:59.123' AS DATETIME2(1)) +go + +SELECT CAST('01/01/98 23:59:59.123' AS DATETIME2(2)) +go + +SELECT CAST('01/01/98 23:59:59.123' AS DATETIME2(3)) +go + + + --- misc SELECT cast('02001-04-22 16:23:51' as datetime2) GO @@ -368,6 +727,10 @@ GO SELECT cast('16 apr 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' as datetime) go +DECLARE @TM_ICLO TIME = '17:24:07.1766670' +SELECT CAST(@TM_ICLO AS DATETIME2) +GO + select * from babel_4328_datetime2_v1 go