Sql 如何从我的数据中排除年-月字符串? 选择 摘录(从saledate算起的年份)|摘录(从saledate算起的月份)为年|月, 来自trnsact 何处年份_月'2005 8'

Sql 如何从我的数据中排除年-月字符串? 选择 摘录(从saledate算起的年份)|摘录(从saledate算起的月份)为年|月, 来自trnsact 何处年份_月'2005 8',sql,datetime,teradata,Sql,Datetime,Teradata,上面是与我的问题相关的示例代码,它在Teradata中运行 因此,我从我的在线课程中得到了一些提示,“|”符号可以加入日期的年份和月份 问题是我不知道如何排除今年月份的某些值对字符串。正如在代码中一样,我想从我的数据中排除2005-08 我尝试过不同版本的订购和样式,我将在下面列出。什么都没用 我还尝试在函数中使用NOT,这也不起作用 我不知道如何搜索我的问题,因为我知道的是这个符号可以做什么,而我没有关于它名称的信息 此外,此| |函数输出的结果是类似“2005 08”的样式 试试这个: SE

上面是与我的问题相关的示例代码,它在Teradata中运行

  • 因此,我从我的在线课程中得到了一些提示,“|”符号可以加入日期的年份和月份

  • 问题是我不知道如何排除今年月份的某些值对字符串。正如在代码中一样,我想从我的数据中排除2005-08

  • 我尝试过不同版本的订购和样式,我将在下面列出。什么都没用
  • 我还尝试在函数中使用NOT,这也不起作用
  • 我不知道如何搜索我的问题,因为我知道的是这个符号可以做什么,而我没有关于它名称的信息
  • 此外,此| |函数输出的结果是类似“2005 08”的样式
  • 试试这个:

    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,…)
    是您能得到的最好的方法,但它永远不会使用分区,而且比multiple
    NOT BETWEEN
    更昂贵@Dnoeth是正确的,如果您处理大量数据,您应该使用他的解决方案
    WHERE saledate NOT BETWEEN DATE '2016-03-01' AND DATE '2016-03-31'