SQL(Teradata)选择数据
我有一个关于SQL(特别是teradata)的问题。 我必须生成一天的报告 我怎样才能做到呢 例如,在ms access中,我可以SQL(Teradata)选择数据,sql,between,teradata,Sql,Between,Teradata,我有一个关于SQL(特别是teradata)的问题。 我必须生成一天的报告 我怎样才能做到呢 例如,在ms access中,我可以 WHERE DT>=#2011-01-01# and DT<=#2011-0101# 但这种方法并不精确。如何使用ranged WHERE语句指定1天 很抱歉,我没有SQL访问权限,无法测试它;因此,我要求提供专业建议。之间的范围包括在内,因此这可以: DT between '2011-09-01' and '2011-09-01' 是的,这是准确的
WHERE DT>=#2011-01-01# and DT<=#2011-0101#
但这种方法并不精确。如何使用ranged WHERE语句指定1天
很抱歉,我没有SQL访问权限,无法测试它;因此,我要求提供专业建议。
之间的范围包括在内,因此这可以:
DT between '2011-09-01' and '2011-09-01'
是的,这是准确的:)
现在,如果您的DT
是日期时间字段(不是日期字段),则必须更改方法:
DT >= '2011-09-01' and DT < '2011-09-02'
DT>='2011-09-01'和DT<'2011-09-02'
当选择某个范围(尤其是日期和时间戳)时,最好是选择包含下限的、独占上限的。也就是说,您想要的是lb=:startDate范围内的内容
和dt<:endDate
(我在系统上输入主机变量的方式是:variableName
。您必须在teradata上查找主机变量。)
您为between列出的字符串将按原样工作—我认为几乎所有主要的RDBMS都默认识别*ISO格式。在Teradata中处理日期可能有点棘手
如果DT是一个“timestamp”字段,您可以简单地将其转换为一个日期,因为您只报告一天,所以只需测试是否相等
假设你今天想报道,那么请输入'03/20/2012':
-- Teradata: Select records where DT matches a certain day.
SELECT * -- etc...
WHERE CAST(DT as date) = TO_DATE('03/20/2012', 'mm/dd/yyyy')
MS SQL与此类似:
SELECT * from [webdb].[mediaguide].[fileDirectories]
WHERE CAST('03/20/2012' AS date) = CAST(DT AS date)
从技术上讲,我会使用参数化来传递日期,但你明白了。简单的答案是:
WHERE DT BETWEEN Date_X AND Date_X + 1
如果你想明确
WHERE DT BETWEEN Date_X AND Date_X + INTERVAL '1' DAY
您可以随时阅读Teradata手册:)
按照他们的手册,x在y和z之间=((x>=y)和(x我的意思是它不是:-\n我可以用DT>='2011-09-01'和DT来表示它不精确吗?基于什么?请定义一个BETWEEN“不精确”的方式,这样我们可以更好地提供帮助。“BETWEEN操作符在不同的数据库中被不同地对待!”你应该知道w3schools不是一个非常可靠的知识来源。看这里:另外,你也应该看这里:另外,分享我的经验,我曾与SQL Server、Oracle、Firebird、Informix、MS Access、MySQL、PostGreSQL合作过(我可能忘记了一些次要的)。绝对没有一个是互斥范围。我想知道你是否正确(@Andrew-什么?你能再解释一下吗?布尔值不是真正的范围-它们只能是TRUE
或false
)(…我忽略null,非常感谢).DT@Andrew-啊,我明白你的意思了。不,我的答案相当于阿德里安发布的答案的第二部分;:startDate
应该是'2011-09-01'
和:endDate
应该是'2011-09-02'
,这将选择2011-09-01
这一天的所有时间。尝试补考包括时间戳在内的每一个界限都是谋杀,因为你必须把所有事情都降低到微秒/纳秒级——从一天的开始开始(通常很琐碎),加上一天,然后得到小于该值的值,这要容易得多。
WHERE DT BETWEEN Date_X AND Date_X + 1
WHERE DT BETWEEN Date_X AND Date_X + INTERVAL '1' DAY