Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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_Intersystems Cache - Fatal编程技术网

sql查询中的拆分字符串

sql查询中的拆分字符串,sql,intersystems-cache,Sql,Intersystems Cache,在名为“Post”的表中,我在名为“Post”的字段中有一个名为“postingdate”的值,它是2009-11-2512:42AM IST格式的字符串 我需要查询以获取基于日期范围的详细信息。我尝试了以下查询,但它抛出了一个错误。请指导我解决此问题。提前谢谢 select postingdate from post where TO_DATE(postingDate,'YYYY-MM-DD')>61689 and TO_DATE(postingDate,'YYYY-MM-DD

在名为“Post”的表中,我在名为“Post”的字段中有一个名为“postingdate”的值,它是
2009-11-2512:42AM IST
格式的字符串

我需要查询以获取基于日期范围的详细信息。我尝试了以下查询,但它抛出了一个错误。请指导我解决此问题。提前谢谢

select postingdate 
from post 
where TO_DATE(postingDate,'YYYY-MM-DD')>61689 
  and TO_DATE(postingDate,'YYYY-MM-DD')<61691
选择发布日期
邮寄
截止日期(发布日期,'YYYY-MM-DD')>61689

在SQL Server中,您可以说

  Select postingdate from post 
  where postingdate between '6/16/1969' and '6/16/1991'

如果它真的是一个字符串,那么幸运的是它是YYYY-MM-DD格式的。您可以将该格式作为字符串进行排序和比较,因为最重要的数字位于左侧。例如:

select *
from Posts
where StringDateCol between '2010-01-01' and '2010-01-02'

不需要将字符串转换为日期,以这种方式进行比较不受
,12:42AM IST
附件的影响。当然,除非您的表包含来自不同时区的日期:)

在对字符串运行日期范围查询之前,您需要将字符串转换为日期。如果您对时间部分不感兴趣,则可以不使用字符串

实际功能将取决于您的RDBMS

for strings only
select * from posts
where LEFT(postingDate,10) > '2010-01-21'

or
for datetime ( Sybase example)
select * from posts
where convert(DateTime,postingDate) between '2010-01-21' and '2010-01-31'

正如您现在看到的,尝试对表示日期的字符串列执行任何类型的查询都是一个问题。您有几个选择:

  • 将postingdate列转换为某种日期或时间戳数据类型。我认为这是您的最佳选择,因为它将使使用此字段查询表更快、更灵活、更不容易出错

  • 将postingdate保留为字符串,并在进行比较时使用函数将其转换回日期。这将是一个性能问题,因为除非您的数据库支持基于函数的索引,否则大多数查询将变成完整表扫描

  • 将postingdate保留为字符串,并将其与其他字符串进行比较。这不是一个好的选择,因为很难找到一种这样做远程查询的方法,我想你已经发现了


  • 如果是我,我会转换数据。祝你好运。

    你在使用什么RDBMS?Oracle、MySql、SQL Server还是其他?顺便说一下:你可能不应该在字符串字段中存储日期值。有一个日期类型。但是当我使用同一个日期时,我没有得到任何记录来获得一天,你会使用“2010-01-01”