将 varchar 转换为日期以将其用于 DB2 的 where

Convert varchar to date to use it into a where DB2

我正在尝试比较数据库中的日期和 varchar。想象一下我有一个像这样的 table

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

错误代码 206 表示 "Column does not exist in any table of the SELECT"。可能是

SELECT mydate(to_date(mydate, '01-25-2016')) 作为新日期,iddummy 来自样本 WHERE newdate < '01-30-2016'

“-206”是因为 SELECT 子句中定义的别名 ("AS newdate") 在 WHERE 子句中尚不可见;解析 SELECT 语句时,子句按以下顺序获取:首先是 FROM,然后是 WHERE,然后是 GROUP BY & 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'

你可以试试这个

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

但这会抛出一个“错误:检测到无效的日期时间格式;也就是说,一个无效的 string representation or value was specified" 如果您的 mydate 包含无法转换为日期的字符串,例如:'01-30-2016aa1232' etc

试试这个

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