在Teradata中使用Casting字符串的问题

时间:2017-11-21 10:02:49

标签: teradata informatica-powercenter

我有一个字符串列 - 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,则会给我错误

由于

3 个答案:

答案 0 :(得分:1)

如果DATE表示/存储在ANSI标准文字YYYY-MM-DD中,则CAST将起作用。

SELECT CAST('2016-12-13' AS DATE FORMAT 'YYYY-MM-DD') AS Date1

enter image description here

但是我怀疑你的情况。

日期最有可能是YYYY-DD-MM格式。在这种情况下,ANSI标准格式将抛出错误。您需要YYYY-DD-MM

select  CAST('2016-13-12' AS DATE FORMAT 'YYYY-DD-MM') AS Date2

enter image description here

P.S。您可以使用TYPE()功能确认转换为日期。它应该在您的情况下返回DATE

答案 1 :(得分:0)

嗨,请尝试这段代码

CAST(CAST(date_col AS FORMAT 'YYYY-MM-DD') AS VARCHAR(15))

而不是您正在使用的转换。

答案 2 :(得分:0)

感谢您的回复。然而,问题是另一回事。一些传入的记录在此列中有空格。所以我不得不调整我的信息映射以在日期列上修剪。现在选择运行正常。谢谢你的时间 。