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

时间:2010-01-04 02:11:40

标签: sql datetime rdb

我正在开发一个连接到旧版RDB数据库的.Net WinForms应用...

日期的某些字段存储为整数(想象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 ...

3 个答案:

答案 0 :(得分:3)

因为我不得不乱用Rdb已经有一段时间了。我似乎记得有一种方法可以通过执行类似

的操作转换为TIMESTAMP数据类型
CAST('YYYYMMDDHHMMSSTT' AS TIMESTAMP)

在哪里'YYYYMMDDHHNNSSTT'是一个年 - 月 - 日 - 小时 - 分 - 秒分数格式的字符串。你可能需要在这里使用DATE ANSI而不是TIMESTAMP - 就像我说的那样,它已经有一段时间了。无论如何,以下可能有效:

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

仍然很丑,但也许比所有子串都要好。无论如何,玩一下,我相信你会得到它。

答案 1 :(得分:1)

在Oracle中,您可以在将date_col转换为字符串后使用TO_DATE:

TO_DATE(TO_CHAR(date_col), 'YYYYMMDD')

...或'YYYYDDMM'代表日期格式。

参考文献:

答案 2 :(得分:0)

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

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