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

发布于 2024-08-16 07:39:18 字数 537 浏览 2 评论 0原文

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

某些日期字段存储为整数(想象 2010-01-04 是整数 20100104)

在 .Net 世界中,我宁愿使用日期时间对象,我已经能够将整数转换为日期,只是它看起来很丑陋,占用很多行,很容易出错,我想知道是否有人能够改进它...非常感谢!

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

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

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 ...

I'm working on a .Net WinForms appliation that is connecting to a legacy RDB database...

Some of the fields for dates are stored as integers (imagine 2010-01-04 was the integer 20100104)

In the .Net world, I'd much rather work with datetime objects and I've been able to convert the integer into a date, just that it looks so ugly, takes up lots of lines, is prone to errors and I'm wondering if anyone would be able to improve it...Thanks heaps!

Note - I cannot edit the database so creating any form of "function" is out of the question...

Here's my current way of selecting the integer as a 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 ...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

仅此而已 2024-08-23 07:39:18

自从我不得不搞乱 Rdb 以来已经有一段时间了。我似乎记得有一种方法可以通过执行类似

CAST('YYYYMMDDHHMMSSTT' AS TIMESTAMP)

WHERE 'YYYYMMDDHHNNSSTT' 是年-月-日-小时-分-秒分数格式的字符串来转换为 TIMESTAMP 数据类型。您可能需要在这里使用 DATE ANSI 而不是 TIMESTAMP - 就像我说的,已经有一段时间了。无论如何,以下方法可能会起作用:

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

这仍然很丑陋,但可能比所有子字符串更好。不管怎样,稍微玩一下,我相信你会明白的。

It's been a while since I had to mess with Rdb. I seem to recall that there was a way to convert to a TIMESTAMP datatype by doing something like

CAST('YYYYMMDDHHMMSSTT' AS TIMESTAMP)

WHERE 'YYYYMMDDHHNNSSTT' was a character string in year-month-day-hour-min-sec-fraction format. You may need to use DATE ANSI here instead of TIMESTAMP - like I say, it's been a while. Regardless, the following might work:

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

which is still ugly but is perhaps better than all the substringing. Anyways, play with it a bit and I'm sure you'll get it.

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

TO_DATE(TO_CHAR(date_col), 'YYYYMMDD')

...或“YYYYDDMM”作为日期格式。

参考文献:

In Oracle, you can use the TO_DATE after you've cast the date_col to a string:

TO_DATE(TO_CHAR(date_col), 'YYYYMMDD')

...or 'YYYYDDMM' for the date format.

References:

初见 2024-08-23 07:39:18

为什么不使用 LINQ 库?它非常好而且功能强大。

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

Why not use LINQ library? It is very nice and powerful.

What are the typical queries that you are running (high-level pseudocode please).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文