我被要求编写一个查询来获取当天前一天放置的所有自动条目。但是,问题是日期是这种格式,我不能改变数据库。
E.g。 20130329.134405990
我不确定我会怎么做。我以为我把它修剪为前8位数,然后减去当天的1天。我不确定代码看起来如何,有人可以对我现有的代码提出任何建议吗?非常感谢
现有查询: 从JnlDB中选择* UserCode ='Automation';
答案 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)
我知道这对可读性来说并不多,但它会做到这一点......