Sql 如何从我的数据中排除年-月字符串? 选择 摘录(从saledate算起的年份)|摘录(从saledate算起的月份)为年|月, 来自trnsact 何处年份_月'2005 8'
上面是与我的问题相关的示例代码,它在Teradata中运行Sql 如何从我的数据中排除年-月字符串? 选择 摘录(从saledate算起的年份)|摘录(从saledate算起的月份)为年|月, 来自trnsact 何处年份_月'2005 8',sql,datetime,teradata,Sql,Datetime,Teradata,上面是与我的问题相关的示例代码,它在Teradata中运行 因此,我从我的在线课程中得到了一些提示,“|”符号可以加入日期的年份和月份 问题是我不知道如何排除今年月份的某些值对字符串。正如在代码中一样,我想从我的数据中排除2005-08 我尝试过不同版本的订购和样式,我将在下面列出。什么都没用 我还尝试在函数中使用NOT,这也不起作用 我不知道如何搜索我的问题,因为我知道的是这个符号可以做什么,而我没有关于它名称的信息 此外,此| |函数输出的结果是类似“2005 08”的样式 试试这个: SE
SELECT
EXTRACT(YEAR from saledate)||EXTRACT(MONTH from saledate) AS YEAR_MONTH,
FROM trnsact
WHERE YEAR_MONTH <> '2005 8'
选择提取(从saledate算起的年份)|提取(从saledate算起的月份)作为年|月
来自trnsact
其中摘录(自销售日期起的年份)2005和
摘录(自销售日期起的月份)08
我不知道EXTRACT(从saledate算起的月份)是否将数据返回为
M
或MM
,但如果不起作用,请将比较切换到8
,而不是08
,EXTRACT
的重新排序数据类型是整数
,如果您发现有一个自动类型转换为VARCHAR(11)
带前导空格和右对齐数字:
SELECT EXTRACT(YEAR from saledate) || EXTRACT(MONTH from saledate) AS YEAR_MONTH
FROM trnsact
WHERE EXTRACT(YEAR from saledate) <> 2005 AND
EXTRACT(MONTH from saledate) <> 08
但是不需要concat,或者使用两个提取或者更好:
' 2016 3'
现在根本不需要计算,搜索条件也可能使用索引或分区。@dnoeth您是否正确,已修复,尽管这并不重要。1。Sagi我想你的意思是:where NOT(EXTRACT(YEAR from saledate)=2005和EXTRACT(MONTH from saledate)=08),因为你给出的代码实际上排除了2005年和8月的数据,其中包括像2005-01和2004-08这样的值,这不是我想要的。2.问题是,我想排除几个年-月对,在这种情况下,您的两个方法@dnoeth都将包含几行代码,可能很难阅读。3.我们有更好的解决方案吗?:)@陈嘉奇: 可读性是一回事,但效率通常更为重要,EXTRACT
plus对每一行的字符串进行类型转换是没有效率的EXTRACT(从saledate算起的年份)*100+EXTRACT(从saledate算起的月份)NOT IN(200508,…)
是您能得到的最好的方法,但它永远不会使用分区,而且比multipleNOT BETWEEN
更昂贵@Dnoeth是正确的,如果您处理大量数据,您应该使用他的解决方案
WHERE saledate NOT BETWEEN DATE '2016-03-01' AND DATE '2016-03-31'