将varchar转换为date以将其用于DB2

时间:2016-06-16 03:17:40

标签: date db2 compare varchar

我正在尝试比较数据库中的日期和varchar。想象一下,我有一张这样的桌子

CREATE TABLE Sample (
    mydate VARCHAR(20),
    iddummy INTEGER
)

我需要做的是:

Select mydate, iddummy from Sample Where mydate > '01-30-2016';

但是,由于mydate是一个varchar(20),它不起作用。所以我试过这种方式

SELECT date(to_date(mydate, '01-25-2016')) as newdate, iddummy 
FROM Sample
WHERE newdate < '01-30-2016'

任何想法如何做到这一点?我收到错误代码-206

4 个答案:

答案 0 :(得分:1)

&#34; -206&#34;是因为SELECT子句中定义的别名(&#34; AS newdate&#34;)在WHERE子句中尚不可见;在解析SELECT语句时,子句按以下顺序进行:FROM先是,然后是WHERE,然后是GROUP BY&amp; HAVING,然后SELECT,最后ORDER BY 您必须在WHERE子句中重复newdate的定义,或者更好:使用CTE:

WITH dt AS (
 SELECT date(to_date(mydate, 'MM-DD-YYYY')) as newdate, iddummy 
 FROM Sample
)
SELECT * FROM dt WHERE newdate < '01-30-2016'

答案 1 :(得分:0)

你可以试试这个

    SELECT mydate as newdate, iddummy 
FROM Sample
WHERE date(mydate)< '01-30-2016'

但是这会给你一个&#34;错误:检测到无效的日期时间格式;也就是说,无效 字符串表示或值已指定&#34;如果您的mydate包含一个无法转换为日期的字符串ex:&#39; 01-30-2016aa1232&#39;等

答案 2 :(得分:0)

尝试使用此

SELECT DATE(CHAR(trim(mydate),10) as newdate, iddummy 
FROM Sample
WHERE DATE(CHAR(trim(mydate),10) < '2016-01-30'

答案 3 :(得分:-1)

错误代码206指出“SELECT在SELECT的任何表中都不存在”。可能是

SELECT mydate(to_date(mydate,'01 -25-2016'))as newdate,iddummy 从样品 在哪里newdate&lt; '01 -30-2016'