我有一个字符串列 - TABLE1中的COL1,如果是字符串数据类型。此表由Informatica会话加载(来自大型机的数据),COL1的格式为YYYY-MM-DD。现在我必须在下一个映射中使用TABLE1作为源。在第二个映射的SQL覆盖查询中,我将使用以下查询将COL1转换为日期。
SELECT
CAST(COL1 AS DATE FORMAT 'YYYY-MM-DD') AS CHK_DT FROM TABLE1
但是当我尝试在Teradata SQLA中执行此查询时,只是为了检查它是否正常运行它会给我以下错误。
SELECT Failed. 2666: Invalid date supplied for COL1.
你能帮我解决一下这个问题吗?这不是唯一有问题的日期列,还有两个日期列。我想所有三列的分辨率都相同。
P.S - 为了验证,我将TABLE1的所有COL1行更新为2016-12-12并运行了select语句,选择工作正常。然后我将所有行的COL1更新为2016-13-12,它给出了同样的错误。如果DD或MM中的任何一个超过12,则会给我错误
由于
答案 0 :(得分:1)
如果DATE
表示/存储在ANSI标准文字YYYY-MM-DD
中,则CAST
将起作用。
SELECT CAST('2016-12-13' AS DATE FORMAT 'YYYY-MM-DD') AS Date1
但是我怀疑你的情况。
日期最有可能是YYYY-DD-MM
格式。在这种情况下,ANSI标准格式将抛出错误。您需要YYYY-DD-MM
select CAST('2016-13-12' AS DATE FORMAT 'YYYY-DD-MM') AS Date2
P.S。您可以使用TYPE()
功能确认转换为日期。它应该在您的情况下返回DATE
答案 1 :(得分:0)
嗨,请尝试这段代码
CAST(CAST(date_col AS FORMAT 'YYYY-MM-DD') AS VARCHAR(15))
而不是您正在使用的转换。
答案 2 :(得分:0)
感谢您的回复。然而,问题是另一回事。一些传入的记录在此列中有空格。所以我不得不调整我的信息映射以在日期列上修剪。现在选择运行正常。谢谢你的时间 。