我正在尝试比较数据库中的日期和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
答案 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'