SQL:查询列(字符串)作为日期

时间:2019-02-10 23:08:33

标签: sql sqlite

假设我在数据库中有几列:iddate_addedtag

`20134` | `February 07, 2019` | `New`
`40323` | `February 09, 2019` | `New`

我想使用基于date_added的过滤器来运行查询:

SELECT * FROM table
WHERE date_added > 'February 08, 2019'

我该怎么做?我看到您可以将字符串转换为日期对象,但是不确定WHERE过滤器中是否可以实现。

感谢您的帮助!

编辑:我正在使用SQLite

2 个答案:

答案 0 :(得分:2)

您为date_added列选择了一种无法比较的格式。
SQLite的日期不是那么灵活,而日期实际上是Text
因此,在这种情况下,您需要逐个提取日期部分并创建可比较的日期:

select *
from tablename
where 
  substr(date_added, instr(date_added, ',') + 2) ||
  case substr(date_added, 1, instr(date_added, ' ') - 1) 
    when 'January' then '01'
    when 'February' then '02'
    when 'March' then '03'
    when 'April' then '04'
    when 'May' then '05'
    when 'June' then '06'
    when 'July' then '07'
    when 'August' then '08'
    when 'September' then '09'
    when 'October' then '10'
    when 'November' then '11'
    when 'December' then '12'
  end ||
  substr(date_added, instr(date_added, ' ') + 1, 2) > '20190208'

请参见demo

答案 1 :(得分:0)

看,我不知道您使用的是哪种数据库引擎,但是如果它是Sql服务器,则可以执行以下操作:

在以下查询中,如果日期类型是日期类型,则不必强制转换date_added列,如果它是字符串类型,则也可以强制转换cast (date_add as date)

SELECT * FROM table
WHERE date_added > cast('2019-01-01' as date)

注意:非常重要的一点是,如果它们要以字符串类型处理日期,则它们必须具有有效的格式,在Sql Server中,日期默认情况下保存在yyyy-MM-dd-2019-02-10中。

如果要将日期转换为其他格式,可以使用convert function