1

我必须运行列检查以确保数据的一致性,而唯一让我的代码出错的是检查某些参数之间日期的字符长度。

SEL
sum(case when ( A.date is  null or (character_length(A.date) >8)) then 1 else 0 end ) as Date
from
table A
;

该列的日期格式为 YYYY-MM-DD,类型为 DA。在 SQL 助手中运行脚本时,我收到错误 3580“非法使用 CHARACTERS、MCHARACTERS 或 OCTET_LENGTH 函数”。

初步研究表明 SQL 助手的 character_length 函数存在问题,但我不知道如何调整代码使其运行。

4

1 回答 1

2

您是否要使用chareter长度来使用内存?因为如果是这样,那对于日期字段来说是恒定的。如果您试图获取字符串表示的长度,我认为LENGTH(A.date)就足够了。不幸的是,由于 teradata 将在转换为字符串时填充零,我认为这可能总是返回 10。

更新 :

好的,所以如果您在输出时想要一个特殊“形式”的日期,您需要正确选择它。在与大多数数据库一样的 teradata 中,日期不是存储在字符串中,而是以整数形式存储,从数据库的给定“纪元”日期开始计算天数(例如,纪元可能是 01/01/0000)。teradata 中的每个日期类型都有一个格式参数,该参数放置在记录标题中,说明如何在选择时格式化输出。默认情况下,DATE FROMAT 'MM/DD/YYYY'我相信日期格式设置为此。你可以通过强制转换来改变它。

试试SELECT cast(cast(A.date as DATE FORMAT 'MM-DD-YYYY') as CHAR(10)) FROM A。看看会发生什么。应该不需要通过小样本验证日期的形式来查看格式是否正确。第二次强制转换强制数据库执行转换并使用指定的格式头。否则,您可能会看到数据库将以日期形式将日期传递给 SQL 助手,而 sql 助手将在应用程序级别执行转换,使用在其自己的设置中指定的格式,而不是在数据库中设置的格式。

于 2012-11-13T17:41:45.033 回答