Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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
String SQLite日期字符串比较。相同的格式不起作用_String_Sqlite_Date_Format_Comparison - Fatal编程技术网

String SQLite日期字符串比较。相同的格式不起作用

String SQLite日期字符串比较。相同的格式不起作用,string,sqlite,date,format,comparison,String,Sqlite,Date,Format,Comparison,请帮忙!这让我快发疯了。是的,我看过几十个类似问题的堆栈溢出答案,他们都说“你的日期应该是一致的接受格式” 我的所有SQLite日期都以以下字符串格式存储: 'yyyy-MM-dd HH:mm:ss' 我试着做日期比较,但没有效果。例如: SELECT transactiondate FROM transactions WHERE transactiondate >= '2010-02-19 00:00:00' 不起作用。。我返回

请帮忙!这让我快发疯了。是的,我看过几十个类似问题的堆栈溢出答案,他们都说“你的日期应该是一致的接受格式”

我的所有SQLite日期都以以下字符串格式存储:

'yyyy-MM-dd HH:mm:ss'
我试着做日期比较,但没有效果。例如:

SELECT         transactiondate
FROM           transactions 
WHERE          transactiondate >= '2010-02-19 00:00:00'
不起作用。。我返回了0条记录

即使在没有WHERE子句的情况下运行它,也会得到返回的日期字符串,如:

'2017-02-25 00:00:00'
事实上,只要做:

SELECT         transactiondate
FROM           transactions 
WHERE          '2017-02-25 00:00:00' >= '2010-02-19 00:00:00'
不起作用,即它以原始形式成功比较日期,但在引用表列值时不起作用

请。。我做错了吗

此外,我尝试了SQL中datetime(…)、date(…)的每一种排列,但都没有效果。我也试过使用。。。之间而且…,这没用


如果有人能解决这个问题,请提前感谢。

好的,这不是答案。但是在评论中你不能做这种事

我无法复制你的情况。代码,特别是SELECT,在Python中运行良好

>>> import sqlite3
>>> conn = sqlite3.connect(':memory:')
>>> cur = conn.cursor()
>>> cur.execute('CREATE TABLE transactions (transactionsdate string)')
<sqlite3.Cursor object at 0x000000000531CCE0>
>>> cur.execute('''INSERT INTO transactions VALUES ('2010-02-10 00:00:00')''')
<sqlite3.Cursor object at 0x000000000531CCE0>
>>> cur.execute('''INSERT INTO transactions VALUES ('2017-02-10 00:00:00')''')
<sqlite3.Cursor object at 0x000000000531CCE0>
>>> list(cur.execute("SELECT * from transactions where transactionsdate >= '2010-02-19 00:00:00'"))
[('2017-02-10 00:00:00',)]
>>> list(cur.execute("SELECT * from transactions"))
[('2010-02-10 00:00:00',), ('2017-02-10 00:00:00',)]
导入sqlite3 >>>conn=sqlite3.connect(“:内存:”) >>>cur=连接光标() >>>cur.execute('创建表事务(transactionsdate字符串)') >>>当前执行(“”“插入交易值('2010-02-10 00:00:00')“”) >>>当前执行(''插入交易值('2017-02-10 00:00:00')'') >>>列表(当前执行(“从TransactionDate>='2010-02-19 00:00:00'”的事务中选择*) [('2017-02-10 00:00:00',)] >>>列表(当前执行(“从事务中选择*)) [('2010-02-10 00:00:00',), ('2017-02-10 00:00:00',)]
暗中捅:你能把字段的内容转储到文本文件中,并用记事本++检查它吗?记事本++可以看到干扰的非打印字符吗?

你的数据中包含了“前端和后端”。列中的transactiondate

然后,您还需要在WHERE过滤器中包含字符。在SQLite中有两种方法可以做到这一点:

select * from transactions where transactiondate >= "'2010-02-19 00:00:00'";
select * from transactions where transactiondate >= '''2010-02-19 00:00:00''';
但是,我建议您清理数据:

update transactions
set transactiondate=substr(transactiondate,2,length(transactiondate)-2)
where transactiondate like "'%'";

现在,您可以使用原始WHERE而不需要额外的字符。

从事务中选择不同的长度(transactiondate);检查不可见的字符。检查空间是否真的是一个标签。我自己使用sqlite来处理这些日期时间的事情,虽然我的格式是yyyymmdd hh:mi:ss.Hi,但我得到了1个结果:length(transactiondate)21,它不同于19。“看不见的魔咒”理论越来越强大。是新线的角色吗?exstra空间?可能数据可以用UPDATE和SUBSTR修复。但是“'2010-02-19 00:00:00'”的长度是21,包括单个引号作为诊断,尝试使用
date
函数将表中存储的一些值转换为“内部”表示,然后再返回“查看发生了什么”?您好,当我导出为CSV并在NotePad++中打开时,transactiondate显示为“'2017-02-18 00:00:00'”,正如我所说,这是在黑暗中拍摄的。(您确实选中了
View | Show Symbols | Show All Characters
吗?)是的,我选中了,肯定只是在记事本++窗口中的“2017-02-18 00:00:00”好的,我放弃了。:)哦,我明白了,我没有意识到单引号是数据的一部分,我想这表明它是一个字符串值!非常感谢,+1'd:)我使用T-SQL和VB web服务工作了一年,因此我的假设是(这种比较以前一直有效)。