Skip to content

Commit f44230c

Browse files
committed
fix(mssql): update is_date function
1 parent 9c78277 commit f44230c

1 file changed

Lines changed: 42 additions & 41 deletions

File tree

testgen/template/flavors/mssql/profiling/templated_functions.yaml

Lines changed: 42 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -3,44 +3,45 @@ IS_NUM: CASE
33
ELSE 0
44
END
55

6-
IS_DATE: CASE WHEN TRY_CAST(NULLIF({$1}, '') AS float) IS NOT NULL
7-
AND LEFT(NULLIF({$1}, ''),4) BETWEEN 1800 AND 2200 THEN
8-
CASE
9-
WHEN LEN((NULLIF({$1}, ''))) > 11 THEN 0
10-
/* YYYYMMDD */
11-
WHEN TRY_CONVERT(DATE, NULLIF({$1}, ''), 112) IS NOT NULL THEN 1
12-
13-
/* YYYY-MM-DD */
14-
WHEN TRY_CONVERT(DATE, NULLIF({$1}, ''), 23) IS NOT NULL THEN 1
15-
16-
/* MM/DD/YYYY */
17-
WHEN TRY_CONVERT(DATE, NULLIF({$1}, ''), 101) IS NOT NULL THEN 1
18-
19-
/* MM/DD/YY */
20-
WHEN TRY_CONVERT(DATE, NULLIF({$1}, ''), 1) IS NOT NULL THEN 1
21-
22-
/*MM-DD-YYYY */
23-
WHEN TRY_CONVERT(DATE, NULLIF({$1}, ''), 110) IS NOT NULL THEN 1
24-
25-
/*MM-DD-YY */
26-
WHEN TRY_CONVERT(DATE, NULLIF({$1}, ''), 10) IS NOT NULL THEN 1
27-
28-
29-
ELSE 0 END
30-
/*DD MMM YYYY */
31-
WHEN (TRY_CONVERT(DATE, NULLIF({$1}, ''), 106) IS NOT NULL
32-
AND LEFT(NULLIF({$1}, ''), 4) BETWEEN 1800 AND 2200)
33-
THEN 1
34-
35-
/* YYYY-MM-DD HH:MM:SS SSSSSS */
36-
WHEN (TRY_CONVERT(DATETIME2, NULLIF({$1}, ''), 121) IS NOT NULL
37-
AND LEFT(NULLIF({$1}, ''), 4) BETWEEN 1800 AND 2200)
38-
THEN 1
39-
40-
/* YYYY-MM-DD HH:MM:SS */
41-
WHEN (TRY_CONVERT(DATETIME2, NULLIF({$1}, ''), 120) IS NOT NULL
42-
AND LEFT(NULLIF({$1}, ''), 4) BETWEEN 1800 AND 2200)
43-
THEN 1
44-
ELSE 0
45-
END
46-
6+
IS_DATE: |-
7+
CASE
8+
WHEN NULLIF(LTRIM(RTRIM({$1})), '') IS NULL THEN 0
9+
WHEN (
10+
COALESCE(
11+
TRY_CONVERT(datetime2, LTRIM(RTRIM({$1})), 112), /* YYYYMMDD */
12+
TRY_CONVERT(datetime2, LTRIM(RTRIM({$1})), 23), /* YYYY-MM-DD */
13+
TRY_CONVERT(datetime2, LTRIM(RTRIM({$1})), 101), /* MM/DD/YYYY */
14+
TRY_CONVERT(datetime2, LTRIM(RTRIM({$1})), 1), /* MM/DD/YY (2-digit year windowing) */
15+
TRY_CONVERT(datetime2, LTRIM(RTRIM({$1})), 110), /* MM-DD-YYYY */
16+
TRY_CONVERT(datetime2, LTRIM(RTRIM({$1})), 10), /* MM-DD-YY (2-digit year windowing) */
17+
TRY_CONVERT(datetime2, LTRIM(RTRIM({$1})), 106), /* DD MMM YYYY */
18+
TRY_CONVERT(datetime2, LTRIM(RTRIM({$1})), 107), /* MMM dd, YYYY */
19+
TRY_CONVERT(datetime2, LTRIM(RTRIM({$1})), 126), /* ISO 8601 no TZ: YYYY-MM-DDTHH:MM:SS[.fff] */
20+
TRY_CONVERT(datetime2, LTRIM(RTRIM({$1})), 120), /* YYYY-MM-DD HH:MM:SS */
21+
TRY_CONVERT(datetime2, LTRIM(RTRIM({$1})), 121), /* YYYY-MM-DD HH:MM:SS.mmm */
22+
TRY_CONVERT(datetime2, LTRIM(RTRIM({$1})), 111), /* YYYY/MM/DD */
23+
TRY_CONVERT(datetime2, LTRIM(RTRIM({$1})), 102), /* YYYY.MM.DD */
24+
/* Normalize "YYYY-MM-DD HH:MM:SS SSSSSS" -> ISO 8601 with 'T' and '.' */
25+
TRY_CONVERT(
26+
datetime2,
27+
CASE
28+
WHEN LTRIM(RTRIM({$1})) LIKE
29+
'[0-9][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9] [0-2][0-9]:[0-5][0-9]:[0-5][0-9] [0-9]%'
30+
THEN
31+
/* Replace DT space (pos 11) with 'T', and the last space with '.' */
32+
STUFF(
33+
STUFF(LTRIM(RTRIM({$1})), 11, 1, 'T'),
34+
LEN(LTRIM(RTRIM({$1}))) - CHARINDEX(' ', REVERSE(LTRIM(RTRIM({$1})))) + 1,
35+
1,
36+
'.'
37+
)
38+
ELSE LTRIM(RTRIM({$1}))
39+
END,
40+
126
41+
)) BETWEEN '1800-01-01T00:00:00' AND '2200-12-31T23:59:59.9999999' )
42+
OR ( /* ISO 8601 with timezone: style 127 parsed as datetimeoffset, then cast */
43+
CAST(TRY_CONVERT(datetimeoffset, LTRIM(RTRIM({$1})), 127) AS datetime2)
44+
BETWEEN '1800-01-01T00:00:00' AND '2200-12-31T23:59:59.9999999' )
45+
THEN 1
46+
ELSE 0
47+
END

0 commit comments

Comments
 (0)