如何改进RDB中的以下SQL选择日期

如何改进RDB中的以下SQL选择日期,sql,datetime,oracle-rdb,Sql,Datetime,Oracle Rdb,我正在开发一个.Net WinForms应用程序,它连接到一个遗留RDB数据库 日期的某些字段存储为整数(假设2010-01-04是整数20100104) 在.Net世界中,我更愿意使用datetime对象,我已经能够将整数转换为日期,只是它看起来很难看,占用了很多行,容易出错,我想知道是否有人能够改进它…谢谢 注意-我无法编辑数据库,因此创建任何形式的“函数”都是不可能的 以下是我当前选择整数作为日期时间的方法: select CAST( SUBSTRING(DATE_COL AS VARCH

我正在开发一个.Net WinForms应用程序,它连接到一个遗留RDB数据库

日期的某些字段存储为整数(假设2010-01-04是整数20100104)

在.Net世界中,我更愿意使用datetime对象,我已经能够将整数转换为日期,只是它看起来很难看,占用了很多行,容易出错,我想知道是否有人能够改进它…谢谢

注意-我无法编辑数据库,因此创建任何形式的“函数”都是不可能的

以下是我当前选择整数作为日期时间的方法:

select
CAST(
SUBSTRING(DATE_COL AS VARCHAR(8)) FROM 1 FOR 4) ||
'-' ||
SUBSTRING(CAST(DATE_COL) AS VARCHAR(8)) FROM 5 FOR 2) ||
'-' ||
SUBSTRING(CAST(DATE_COL) AS VARCHAR(8)) FROM 7 FOR 2) ||
' 00:00:00'
AS TIMESTAMP) AS DATE_COL
from MY_TABLE
where ...

为什么不使用LINQ库?这是非常好和强大的


您正在运行的典型查询是什么(请使用高级伪代码)。

在Oracle中,您可以在将日期列转换为字符串后使用TO\u DATE:

TO_DATE(TO_CHAR(date_col), 'YYYYMMDD')
…或“YYYYDDMM”作为日期格式

参考资料:


我已经有一段时间没有处理Rdb了。我似乎记得有一种方法可以通过执行以下操作转换为时间戳数据类型

CAST('YYYYMMDDHHMMSSTT' AS TIMESTAMP)
其中,“YYYYMMDDHHNNSSTT”是年-月-日-小时-分-秒分数格式的字符串。你可能需要在这里使用日期而不是时间戳——就像我说的,已经有一段时间了。无论如何,以下方法可能有效:

SELECT CAST((CAST(DATE_COL AS CHAR(8)) || '00000000') AS TIMESTAMP)...

这仍然很难看,但可能比所有的子串都好。无论如何,玩一玩,我相信你会得到它。

关键是,poster必须先将其转换,然后再对其进行任何其他操作。LINQ不是所有问题的答案!同意Mitch的观点,我只是想让.net代码(因此是linq或其他)认为它已经在处理一个日期字段OMG Ponies,Oracle RDB 7与现在的Oracle相同吗?我认为它们是不同的…我只是想补充一下,您的解决方案似乎正在工作,只是它迫使我输入额外的参数(每个参数需要3个),但我认为这与环境有关,而不是您的解决方案…例如。到目前为止(到CHAR(DATE_col,'00000000','NLS…'),'YYYYMMDD','NLS…'),尽管它们是可选的OK…我相当确定Oracle X与RDB不同…后者是由Oracle购买的…我以前从未听说过RDB。当我在谷歌上搜索RDB7时,我还以为是8i之前的版本。幸运的是,语法是受支持的,即使参数在RDB 7中是非可选的。RDB最初是DEC(Digital Equipment Corp)产品,由Oracle购买以获得一些技术-我相信它是基于成本的优化器,RDB在Oracle的旗舰产品之前就已经有了。使用它很多年了-很好的产品,但是工具有限。最终使用了一个非常类似于您的解决方案,它是CAST(CAST(DATE_COL AS VARCHAR(8))AS DATE VMS)啊哈!约会虚拟机!我就知道是这样的!:-)很高兴能激发你的想法。