我被要求编写一个查询来获取当天前 1 天放置的所有自动条目。但是,问题是日期是这种格式,我无法更改数据库。
例如 20130329.134405990
我不确定我会怎么做。我在想我将它修剪到前 8 位数字,然后将当天减去 1 天。我不确定代码的外观如何,任何人都可以对我现有的代码提出任何建议吗?那将不胜感激
现有查询:select * from JnlDB where UserCode = 'Automation';
在 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)
我知道这对可读性来说并不多,但它会成功......
您可以使用它来获取当前日期前一天(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))
更新,没有按照您的要求与今天进行比较。
就在我的脑海中:您可以运行以下查询:
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 中有更好、更高效的方法来执行此操作,但我已经远离它很久了。