{"record":{"id":"27dd719221463718","repo":"prestodb/presto","slug":"invalid-cast-argument-27dd71","errorCode":"INVALID_CAST_ARGUMENT","errorMessage":"Value cannot be cast to date: ","messagePattern":"Value cannot be cast to date: ","errorType":"error_code","errorClass":"PrestoException","httpStatus":null,"severity":"error","filePath":"presto-main-base/src/main/java/com/facebook/presto/type/DateOperators.java","lineNumber":161,"sourceCode":"    @ScalarOperator(CAST)\n    @LiteralParameters(\"x\")\n    @SqlType(\"varchar(x)\")\n    public static Slice castToSlice(@SqlType(StandardTypes.DATE) long value)\n    {\n        return utf8Slice(printDate((int) value));\n    }\n\n    @ScalarFunction(\"date\")\n    @ScalarOperator(CAST)\n    @LiteralParameters(\"x\")\n    @SqlType(StandardTypes.DATE)\n    public static long castFromSlice(@SqlType(\"varchar(x)\") Slice value)\n    {\n        try {\n            return parseDate(trim(value).toStringUtf8());\n        }\n        catch (IllegalArgumentException e) {\n            throw new PrestoException(INVALID_CAST_ARGUMENT, \"Value cannot be cast to date: \" + value.toStringUtf8(), e);\n        }\n    }\n\n    @ScalarOperator(HASH_CODE)\n    @SqlType(StandardTypes.BIGINT)\n    public static long hashCode(@SqlType(StandardTypes.DATE) long value)\n    {\n        return AbstractIntType.hash((int) value);\n    }\n\n    @ScalarOperator(IS_DISTINCT_FROM)\n    public static class DateDistinctFromOperator\n    {\n        @SqlType(StandardTypes.BOOLEAN)\n        public static boolean isDistinctFrom(\n                @SqlType(StandardTypes.DATE) long left,\n                @IsNull boolean leftNull,\n                @SqlType(StandardTypes.DATE) long right,","sourceCodeStart":143,"sourceCodeEnd":179,"githubUrl":"https://github.com/prestodb/presto/blob/55bb57d202de3b926896fa966c2c4a44c779634e/presto-main-base/src/main/java/com/facebook/presto/type/DateOperators.java#L143-L179","documentation":"Thrown when casting a VARCHAR value to DATE: castFromSlice parses the trimmed string with parseDate and wraps IllegalArgumentException in INVALID_CAST_ARGUMENT. It means the text is not in a recognized date format (e.g. not YYYY-MM-DD) or represents an invalid calendar date.","triggerScenarios":"CAST(varchar_col AS DATE) where the string is empty, wrongly formatted ('2026/09/04', 'Sep 4 2026', '2026-13-40'), or contains extra characters.","commonSituations":"CSV/text-borne date columns with mixed formats, locale-formatted dates, or dates stored with timestamps appended.","solutions":["Normalize the string to ISO format YYYY-MM-DD before casting (date_parse/substr/regexp).","Use TRY_CAST(varchar_col AS DATE) to get NULL for bad rows and audit them.","Use parse_datetime with an explicit format specifier matching the source data.","Trim/strip time components if values look like '2026-09-04 12:00:00'."],"exampleFix":"// before\nSELECT CAST(date_str AS DATE) FROM t;\n// after\nSELECT TRY_CAST(date_parse(date_str, '%Y/%m/%d') AS DATE) FROM t;","handlingStrategy":"validation","validationCode":"-- pre-validate before casting\nSELECT * FROM t\nWHERE NOT regexp_like(trim(date_str), '^\\d{4}-\\d{2}-\\d{2}$');","typeGuard":"boolean isIsoDate(String s) { return s != null && s.trim().matches(\"\\\\d{4}-\\\\d{2}-\\\\d{2}\"); }","tryCatchPattern":"try { long d = DateOperators.castFromSlice(slice); } catch (PrestoException e) { /* INVALID_CAST_ARGUMENT: route row to quarantine */ }","preventionTips":["Standardize date storage on ISO YYYY-MM-DD.","Use TRY_CAST plus a NULL audit for mixed-format sources.","Prefer parse_datetime with explicit format for non-ISO inputs."],"tags":["presto","type-cast","date","varchar"],"backgroundTag":"invalid-cast-argument","analyzedSha":"55bb57d202de3b926896fa966c2c4a44c779634e","analyzedAt":"2026-09-04T12:50:26.162Z","contentChangedAt":"2026-09-04T12:50:26.162Z","schemaVersion":2},"datasetVersion":"2026-09-11T21:17:09.523Z"}