【问题标题】:character_length Teradata SQL Assistantcharacter_length Teradata SQL 助手
【发布时间】:2012-11-13 17:35:16
【问题描述】:

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

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 函数存在问题,但我不知道如何调整代码使其运行。

【问题讨论】:

  • 我对您要完成的工作感到困惑,您为什么要检查日期长度?
  • 如果有帮助,我正在使用 Teradata v13.0。它是向美联储提交数据所必需的。他们想要特定形式的数据。
  • A.date 的日期类型正确吗?

标签: sql teradata


【解决方案1】:

您是否尝试使用 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 助手将在应用程序级别执行转换,使用在其自己的设置中指定的格式,而不是在数据库中设置的格式。

【讨论】:

  • length(A.date) 给我和错误 3706“数据类型'日期'与定义的类型名称不匹配”
  • 试试length(CAST(A.date as VARCHAR(20)))看看会发生什么??
  • 当我运行它时它起作用了:select cast(A.date as varchar(20)) as Date from Table a where Date>8
  • 虽然可以根据需要工作,但我认为我需要 SELECT cast(cast(A.dateas DATE FORMAT 'YYYYMMDD') as CHAR(8)) 从表 a
猜你喜欢
  • 2020-12-07
  • 2016-05-10
  • 2023-03-15
  • 2018-11-19
  • 2014-03-10
  • 2019-02-05
  • 2017-07-19
  • 2013-10-13
  • 2019-04-12
相关资源
最近更新 更多