查询在SQL中修剪日期

时间:2013-06-20 13:06:37

标签: sql date trim

我被要求编写一个查询来获取当天前一天放置的所有自动条目。但是,问题是日期是这种格式,我不能改变数据库。

E.g。 20130329.134405990

我不确定我会怎么做。我以为我把它修剪为前8位数,然后减去当天的1天。我不确定代码看起来如何,有人可以对我现有的代码提出任何建议吗?非常感谢

现有查询: 从JnlDB中选择* UserCode ='Automation';

3 个答案:

答案 0 :(得分:0)

您可以使用它来获取当前日期前一天(SQL SERVER):

SELECT DATEADD(day,-1,GETDATE())

我认为会是:

SELECT *
FROM Table
WHERE LEFT(CAST(datefield AS VARCHAR(25)),8) = CAST(DATEADD(day,-1,GETDATE()) AS VARCHAR(25))

更新,并未按照您的要求与今天进行比较。

答案 1 :(得分:0)

刚刚脱离我的头顶:  您可以运行以下查询:

SELECT * FROM JnlDB WHERE UserCode = 'Automation' AND     
SUBSTR(ENTEREDDATE,1,8)=TO_CHAR(SYSDATE-1,'YYYYMMDD');

这适用于Oracle。

在SQL Server中:

 SELECT * FROM JnlDB WHERE UserCode = 'Automation' AND     
 CONVERT(VARCHAR,LEFT(ENTEREDDATE,8))=CONVERT(VARCHAR(8),GETDATE()-1,112)

我确信在SQL Server中有更好,更高效的方法,但我已经远离它了。

答案 2 :(得分:0)

在SQL Server中:

SELECT * 
  FROM TableName
 WHERE the_date >= CAST(CONVERT(Varchar, DateDiff(day, -1, CURRENT_TIMESTAMP), 112) AS Int) 
   AND the_date <  CAST(CONVERT(Varchar, CURRENT_TIMESTAMP, 112) AS Int) 

在Oracle中:

SELECT *
  FROM TableName
 WHERE the_date >= CAST(TO_CHAR(CURRENT_TIMESTAMP - 1, 'YYYYMMDD') AS Int)
   AND the_date < CAST(TO_CHAR(CURRENT_TIMESTAMP, 'YYYYMMDD) AS Int)

我知道这对可读性来说并不多,但它会做到这一点......