0

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

例如 20130329.134405990

我不确定我会怎么做。我在想我将它修剪到前 8 位数字,然后将当天减去 1 天。我不确定代码的外观如何,任何人都可以对我现有的代码提出任何建议吗?那将不胜感激

现有查询:select * from JnlDB where UserCode = 'Automation';

4

3 回答 3

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) 

在甲骨文中:

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)

我知道这对可读性来说并不多,但它会成功......

于 2013-07-05T15:43:44.533 回答
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))

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

于 2013-06-20T13:17:17.590 回答
0

就在我的脑海中:您可以运行以下查询:

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

这将适用于甲骨文。

但在 SQL Server 中:

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

我确信在 SQL Server 中有更好、更高效的方法来执行此操作,但我已经远离它很久了。

于 2013-06-20T13:17:27.327 回答