我必须对数据一致性进行列检查,唯一抛弃我的代码的是检查某些参数之间日期的字符长度。
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 Assistant中运行脚本时,出现错误3580“非法使用CHARACTERS,MCHARACTERS或OCTET_LENGTH函数。”
初步研究表明SQL Assistant存在character_length函数问题,但我不知道如何调整代码以使其运行。
答案 0 :(得分:2)
chareter length你试图获取内存吗?如果是这样,那么日期字段是常量。如果你想获得字符串表示的长度,我认为LENGTH(A.date)
就足够了。不幸的是,因为teradata会在转换为字符串时将零填充,我认为这可能总是返回10。
更新:
好的,如果您想在输出日期时使用特殊的“表单”,则需要正确选择它。在teradata中,与大多数数据库一样,日期不存储在字符串中,而是作为整数存储,从数据库的给定“纪元”日期开始计算天数(例如,纪元可能是01/01/0000)。 teradata中的每个日期类型都有一个格式参数,该参数在记录标题中放置有关如何格式化select输出的说明。默认情况下,我相信日期格式设置为此DATE FROMAT 'MM/DD/YYYY'
。你可以通过施法来改变它。
试试SELECT cast(cast(A.date as DATE FORMAT 'MM-DD-YYYY') as CHAR(10)) FROM A
。看看会发生什么。不需要验证小样本之后的日期形式,以确定格式是否正确。第二个强制转换强制数据库执行转换并使用指定的格式标头。另外,您可能会看到数据库将日期表单中的日期传递给SQL Assitant,而sql assitant将使用在其自己的设置中指定的格式而不是数据库中设置的格式在应用程序级别执行转换。