Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL:查询列(字符串)作为日期_Sql_Sqlite - Fatal编程技术网

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

SQL:查询列(字符串)作为日期,sql,sqlite,Sql,Sqlite,假设我在数据库中有几个列:id,date\u added,tag `20134` | `February 07, 2019` | `New` `40323` | `February 09, 2019` | `New` 我想根据添加的日期运行带有筛选器的查询: SELECT * FROM table WHERE date_added > 'February 08, 2019' 我该怎么做?我看到您可以将字符串转换为日期对象,但不确定在WHERE过滤器中是否可以 感谢您的帮助 编辑:我正在

假设我在数据库中有几个列:
id
date\u added
tag

`20134` | `February 07, 2019` | `New`
`40323` | `February 09, 2019` | `New`
我想根据添加的日期运行带有筛选器的查询:

SELECT * FROM table
WHERE date_added > 'February 08, 2019'
我该怎么做?我看到您可以将字符串转换为日期对象,但不确定在
WHERE
过滤器中是否可以

感谢您的帮助


编辑:我正在使用SQLite

听着,我不知道您使用的是什么数据库引擎,但如果是Sql server,您可以执行以下操作:

在下面的查询中,如果date\u added列是date类型,则不必强制转换该列,如果它是string类型,还可以强制转换它
cast(date\u Addas date)

注意:如果要将日期作为字符串类型处理,则必须使用有效的格式,这一点非常重要。在Sql Server中,日期默认保存在
yyyy-MM-dd
-
2019-02-10


如果要将日期转换为另一种格式,可以使用

外观,我不知道您使用的是什么数据库引擎,但如果是Sql server,则可以执行以下操作:

在下面的查询中,如果date\u added列是date类型,则不必强制转换该列,如果它是string类型,还可以强制转换它
cast(date\u Addas date)

注意:如果要将日期作为字符串类型处理,则必须使用有效的格式,这一点非常重要。在Sql Server中,日期默认保存在
yyyy-MM-dd
-
2019-02-10


如果要将日期转换为另一种格式,可以使用您为添加的日期列选择的格式,该格式是不可比较的
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'

请参见您为添加的日期列选择的格式,该格式不可比较
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'

请参见WHERE子句中的

是,您可以轻松做到这一点,操作方式取决于您使用的数据库。请用正确的DBMSY标记您的问题,您可以在WHERE子句中轻松地完成此操作,how取决于您使用的数据库。请用正确的DBMSok标记您的问题,我可以回去更改日期。有什么方法可以让我看到什么是兼容的吗?您必须选择的格式是
YYYY-MM-DD
。这是可直接比较的。好吧,假设这是格式,如何将列中的字符串转换为可以比较的日期?这就是让我困惑的部分你不需要转换,你可以做:WHERE date_added>“2019-02-08”哦,我明白了。如果日期是这种格式,SQL可以将其理解为“日期”,而不是字符串?好的,我可以返回并更改日期。有什么方法可以让我看到什么是兼容的吗?您必须选择的格式是
YYYY-MM-DD
。这是可直接比较的。好吧,假设这是格式,如何将列中的字符串转换为可以比较的日期?这就是让我困惑的部分你不需要转换,你可以做:WHERE date_added>“2019-02-08”哦,我明白了。如果日期是这种格式,SQL可以将其理解为“日期”,而不是字符串?